2011-05-08 3 views
2

Lucene 3.1을 사용하여 일부 문서의 색인을 생성하고 있습니다.Lucene docFreq returns 0

IndexSearcher.search()를 사용하면 쿼리 결과가 성공적으로 반환됩니다.

그러나 IndexSearcher.doqFreq()를 사용하면이라는 용어로 0이 반환됩니다. 누구나 통찰력을 제공 할 수 있습니까?

또한 IndexSearcher.docFreq()와 IndexReader.docFreq()가 둘 다있는 이유는 무엇입니까? 심지어 내가 같은 검색어로 IndexSearcher.search()를 사용할 때하더라도,

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을 얻을 : 나는 모두를 시도, 둘 다 나에게주고 여기에

0 내 코드입니다 문자열, 나는 다시 안타.

답변

1

search.docFreq (용어)를 사용하여 문서 빈도를 얻으려면 작성중인 용어에서 TermQuery를 작성하십시오. 이 TermQuery를 사용하여 검색하고 결과가 있는지 확인하십시오. 그것해야합니다. 이 TermQuery가 결과를 제공하지 않으면 질문의 검색 단계 1에서 쿼리 작성시 문제가 발생합니다.

1

용어를 소문자로 완전히 바꾸어보십시오.

1

Field.TermVector.YES 옵션을 사용하여 필드를 추가하고 있습니까?

Document doc = new Document(); 
doc.add(new Field("value", documentContents, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES)); 
1

사용 TermEnum :

Term term = new Term(field, searchTermString); 
TermEnum enum = indexReader.terms(term); 
int numDocs = enum.docFreq(); 

그리고 당신이 IndexSearcher

필요하지 않습니다