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になります。
私は明らかに何か間違ったことをしているが、何がわからない。手がかり/アイデアは大歓迎です。
java7とlucene3.6.1を使用しているim。このコードをコンパイルするには、luceneコアとluceneアナライザーのアーティファクトが必要です