我试图演示 lucene 数字范围查询,但无法正常工作。这就是我想要做的事情:
public static void main( String[] args ) throws Exception{
Path indexDir = Files.createTempDirectory("index");
Directory directory = FSDirectory.open(indexDir.toFile());
Analyzer analyzer = new EnglishAnalyzer(Version.LUCENE_36);
IndexWriterConfig writerConfig = new IndexWriterConfig(Version.LUCENE_36, analyzer);
writerConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE);
IndexWriter writer = new IndexWriter(directory, writerConfig);
for (int i=0; i<100; i++) {
Document doc = new Document();
for (int j = 0; j<10; j++) {
NumericField field = new NumericField("numericField", Field.Store.YES, true);
field.setDoubleValue(Math.random());
doc.add(field);
}
writer.addDocument(doc);
}
writer.close(true);
directory.close(); //just to be safe
analyzer = new EnglishAnalyzer(Version.LUCENE_36);
directory = FSDirectory.open(indexDir.toFile());
IndexReader reader = IndexReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);
QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_36, new String[] {"someField", "someOtherField"}, analyzer);
Query q = parser.parse("numericField:[0 TO 0.5]");
TopDocs results = searcher.search(q, 100);
System.out.println("got "+results.scoreDocs.length+" results");
}
基本上我正在创建一个新的 FS 目录,索引 100 个文档,每个文档有 10 个随机值的数字字段,使用相同的名称(lucene 文档说这是允许的?)然后我尝试使用范围查询搜索这个新创建的索引。
我希望每次都能获得近 100 次点击,但每次结果都是 0。
我显然做错了什么,但我不知道是什么。任何线索/想法都会非常受欢迎。
我正在使用 java 7 和 lucene 3.6.1。此代码需要 lucene 核心和 lucene 分析器工件来编译