2012-08-27 6 views
1

내 Lucene.net (2.9.2) 모든 문서를 반환하는 쿼리는 두 개의 필드가 문서의 모든 텍스트가 저장되는 곳입니다 (Field.Store.NO , Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS 사용). 나는이 쿼리를 수행 할 때 categoryid:1Lucene.net 원하지 않는 문서

:이 쿼리가 실행되면 Field.Store.YES, Field.Index.NOT_ANALYZED

, 그것은 해당 카테고리 ID 문서를 반환

categoryid

는 텍스트로 저장 단지 숫자 필드 categoryid:1 foo bar는 문서를 반환 1 이외의 다른 카테고리에서 가져 오기

왜 그런가요? 그리고 원래의 categoryid:N 검색어를 존중하도록하려면 어떻게해야합니까?

답변

3

입력 한 모든 단어가 일치하는 문서에 나타나길 원하십니까?

var analyzer = new StandardAnalyzer(Version.LUCENE_30); 
var queryParser = new QueryParser(Version.LUCENE_30, "bodytext", analyzer); 

// This ensures that all terms are required. 
queryParser.DefaultOperator = QueryParser.Operator.AND; 

var query = queryParser.Parse("categoryid:1 foo bar"); 
// query = "+categoryid:1 +bodytext:foo +bodytext:bar" 
+0

Lucene의 기본값은 AND 연산자 대신 OR 연산자를 사용합니까? – Dai

+0

@David, 정확하게. 잘못 쓰인 단어를 더 잘 처리합니다. 빈 검색 결과 대신 무시되도록합니다. – sisve

+0

버전 2.9에서는 구문이 약간 다릅니다 :'queryParser.SetDefaultOperator (QueryParser.AND_OPERATOR)'. – Oliver