タイトルのように、困惑した問題に遭遇しました。テストプログラムのインデックスを作成し、IndexWriterを使用してドキュメントをインデックスに追加します。コードは:
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_CURRENT, analyzer);
IndexWriter iwriter = new IndexWriter(directory, config);
Document doc1 = new Document();
doc1.add(new Field("name", "张三", Field.Store.YES, Field.Index.ANALYZED));
doc1.add(new IntField("year", 2013, Field.Store.YES));
doc1.add(new TextField("content", "123456789", Field.Store.YES));
iwriter.addDocument(doc1);
iwriter.commit();
iwriter.close();
このインデックスで検索しようとすると、このドキュメントを取得できません。私は本当に正しい結果カウントを取得します、それは以前より1つ多くなっています。しかし、doc.get('name')を出力しようとすると、出力が間違っています。
検索部分のコードは次のとおりです。
DirectoryReader ireader = DirectoryReader.open(directory);
System.out.println(ireader.numDeletedDocs());
IndexSearcher isearcher = new IndexSearcher(ireader);
// Parse a simple query that searches for "text":
QueryParser parser = new QueryParser(Version.LUCENE_CURRENT, "name", analyzer);
Query query = parser.parse("张");
ScoreDoc[] hits = isearcher.search(query, null, 1000).scoreDocs;
System.out.println(hits.length);
結果として、「名前:李四」があります。インデックス作成と検索の際には、必ずStandardAnalyzerを使用しています。また、StandardAnalyzerは、1つの漢字を1つのトークンとして作成します。「张」を検索すると「李四」が表示されるのはなぜですか?ドキュメントを追加するときに何か問題がありますか?または、docidが不一致ですか?