我正在使用Lucene 3.1索引某些文档。
当我使用IndexSearcher.search()时,我成功地获取了查询结果。
但是,当我使用IndexSearcher.doqFreq()时,我会返回0代表。任何人都可以提供一些见解吗?
另外,为什么同时存在IndexSearcher.docFreq()和IndexReader.docFreq()?我试过了两个,都给了我0。
这是我的代码:
IndexReader indexReader = IndexReader.open(dir);
IndexSearcher searcher = new IndexSearcher(indexReader);
...
String seachTermString = "foobar";
String field = "body";
Term term = new Term(field, searchTermString);
int numDocs = searcher.docFreq(term);
然后我得到numDocs = 0,即使我使用具有相同搜索词字符串的IndexSearcher.search(),我也会回来点击。
答案 0 :(得分:1)
使用search.docFreq(term)从您创建的术语创建TermQuery以获取文档频率。使用此TermQuery进行搜索并检查它是否产生任何结果。这应该。如果这个TermQuery没有给出任何结果,那么问题搜索的第1步中的查询创建就会出现问题。
答案 1 :(得分:1)
尝试将您的字词完全转换为小写字母。
答案 2 :(得分:1)
您是否在启用Field.TermVector.YES选项的情况下添加了字段?
Document doc = new Document();
doc.add(new Field("value", documentContents, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES));
答案 3 :(得分:1)
使用TermEnum
:
Term term = new Term(field, searchTermString);
TermEnum enum = indexReader.terms(term);
int numDocs = enum.docFreq();
您不需要IndexSearcher