我需要索引文档并搜索它们。我有多个字段要查询。当我搜索索引文件时,我正在重复文档。这就是我查询的方式:
MultiFieldQueryParser parser = new MultiFieldQueryParser( Version.LUCENE_40, new String[] {"title", "abs"}, analyzer);
查询query = parser.parse(querystr);
这是我的展示:
TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, true);
searcher.search(query, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;
// 4. display results
System.out.println("Found " + hits.length + " hits.");
for(int i=0;i<hits.length;++i) {
int docId = hits[i].doc;
Document d = searcher.doc(docId);
System.out.println((i + 1) + ". " + d.get("pmid") + "\t" + d.get("title"));
}
答案 0 :(得分:0)
您的代码看起来不错,但是如果您打印docId
值,则会有所帮助。
如果此值不同,那么您很可能会多次将文档添加到需要修复的索引中。
请记住,Lucene并没有内置的身份概念。对于Lucene而言,即使它们具有完全相同的术语,所有文档也是不同的。解决此问题的标准方法是让非分析字段包含一些外部ID(例如数据库ID),并在发生更改时删除+重新添加更新文档。