110,577
社区成员
发帖
与我相关
我的任务
分享
doc.Add(new Field("auto_id",ddr["auto_id"].ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
//生成前导0的数字
public class NumberUtils {
private static final DecimalFormat formatter = new DecimalFormat("0000000000");
public static String pad(int n) {
return formatter.format(n);
}
}
//调用示例
{
Document doc = new Document();
while (!ddr.eof())
{
doc.add(new Field("auto_id", NumberUtils.pad(ddr["auto_id"].ToString()), Field.Store.YES, Field.Index.UN_TOKENIZED);
writer.addDocument(doc);
}
//主要方法是:getRangeQuery
protected Query getRangeQuery(String field, Analyzer analyzer,
String part1, String part2,
boolean inclusive)
throws ParseException {
if ("id".equals(field)) {
try {
int num1 = Integer.parseInt(part1);
int num2 = Integer.parseInt(part2);
return new RangeQuery(
new Term(field, NumberUtils.pad(num1)),
new Term(field, NumberUtils.pad(num2)),
inclusive);
} catch (NumberFormatException e) {
throw new ParseException(e.getMessage());
}
}
return super.getRangeQuery(field, analyzer, part1, part2,
inclusive);
}
CustomQueryParser parser = new CustomQueryParser("field", analyzer);
Query query = parser.parse("id:[37 TO 346]");
assertEquals("padded", "id:[0000000037 TO 0000000346]",query.toString("field"));
IndexSearcher searcher = new IndexSearcher(directory);
Hits hits = searcher.search(query);