Lucene docFreq返回0

时间:2011-05-08 19:32:07

标签: java lucene

我正在使用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(),我也会回来点击。

4 个答案:

答案 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