如题所说,我遇到了一个不解的问题。我已经为我的测试程序建立了一个索引,然后我使用 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();
当我尝试在此索引中搜索时,我无法获得此文档。我真的得到了正确的结果计数,比以前多了一个。但是当我尝试打印 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 会将一个汉字作为一个单一的记号。为什么我搜索“张”会得到“李四”?添加文档时有什么问题吗?还是docid不匹配?