2012-12-12 4 views
0

여러 용어를 사용할 때 작업 순서를 제어 할 수 있습니까? 예를 들어 Lucene.net : 여러 용어로 작업 순서를 제어하는 ​​방법

, 내가 검색을 적용 할 때

Lucene.Net.Search.TermQuery tq1 = new Lucene.Net.Search.TermQuery(new Lucene.Net.Index.Term("location", "seattle")); 
Lucene.Net.Search.TermQuery tq2 = new Lucene.Net.Search.TermQuery(new Lucene.Net.Index.Term("location", "portland")); 
Lucene.Net.Search.TermQuery tq3 = new Lucene.Net.Search.TermQuery(new Lucene.Net.Index.Term("location", "spokane")); 
Lucene.Net.Search.TermQuery tq4 = new Lucene.Net.Search.TermQuery(new Lucene.Net.Index.Term("type", "city")); 

, 나는 내 검색을 필터링 할 수 위의 약관을 적용 할 말을 할 수 있습니다, 그래서 내 쿼리 형식은 다음과 같을 것 ... 음식에 대한 검색을 할 수 있습니다

음식 AND ((TQ1 또는 TQ2 또는 TQ3)와 tq4)

가 현재 나는 다음과 같은 형식으로 구축 할 수있었습니다

{+xml:food +(location:seattle location:portland location:spokane +location:city)} 
,

그러나, 나는 기본적으로

{+xml:food +(+(location:seattle location:portland location:spokane) +location:city)} 

의 형식으로 그걸 얻기 위해 노력하고, 내가 뭘

Lucene.Net.Search.BooleanQuery bq = new Lucene.Net.Search.BooleanQuery(); 
Lucene.Net.Search.BooleanQuery innerBQ = new Lucene.Net.Search.BooleanQuery(); 
bq.Add("xml:food", Lucene.Net.Search.BooleanClause.Occur.MUST); 
foreach (Lucene.Net.Index.Term term in listOfTerms) 
{ 
    Lucene.Net.Search.TermQuery tq = new Lucene.Net.Search.TermQuery(term)); 
    innerBQ.Add(tq, Lucene.Net.Search.BooleanClause.Occur.SHOULD); 
} 
innerBQ.Add("location:city", Lucene.Net.Search.BooleanClause.Occur.MUST); 
bq.Add(innerBQ, Lucene.Net.Search.BooleanClause.Occur.MUST); 

모든 제안은 감사합니다 ...이 같은 것입니다.

답변

0

당신은 bq 대신

+0

innerBQ의 감사에 location:city 조항을 추가해야합니다. 조금 더 쳐다 보면서 이러한 부울 쿼리를 조합하는 방법을 이해해야했습니다. – Kevin

관련 문제