2013-03-16 3 views
-1

Lucene.NET 3.0.3을 사용하여 두 필드 ("Noidung", "Dapa"라는 두 개의 필드가 있음)에 대한 검색을 수행하고 있습니다. BooleanQuery을 C#으로 사용하지만 이것을 실행할 때 결과로 아무 것도 반환하지 않는 코드를 테스트했기 때문에 검색 할 소스에 아무런 문제가 없다고 확신합니다. 그래서 Lucene.NET 3.0.3을 사용하는 사람이 설명을 할 수 있습니까? Lucene.NET 3.0.3에서 BooleanQuery가 반환되지 않는 이유는 무엇입니까?


IndexReader indexreader = IndexReader.Open(directory, true); 
Searcher indexsearch = new IndexSearcher(indexreader); 

BooleanQuery bq = new BooleanQuery(); 

Query q1 = new TermQuery(new Term("Noidung", PhanSoSanh)); 
Query q2 = new TermQuery(new Term("Dapa", txtText.Text.ToString().Trim())); 
bq.Add(q1, Occur.MUST); 
bq.Add(q2, Occur.MUST); 

TopDocs ketqua = indexsearch.Search(bq, null, 500); 

var hits = ketqua.ScoreDocs; 
foreach (var hit in hits) 
{ 
    // Return result 
} 

나는 색인 ("Noidung", "방위 사업 청")을 2 필드가 있습니다. 이제 "Noidung"필드를 검색 한 다음 결과를 "Dapa"로 검색하고 싶습니다. 나는 booleanQuery를 사용하지만 결과에서 주목할만한 결과를 얻지 못했습니까? 도와주세요?

+2

용어 검색어를 만드는 방법은 대소 문자 및 토큰 화와 관련하여 정확한 일치를 수행 할 것을 제안합니다. KeywordAnalyzer로 문서의 색인을 생성하고 있습니까? PhanSoSanh 및 txtText.Text 값은 무엇입니까? 왜 당신은 QueryParser를 사용하지 않는가? – sisve

+0

PhanSoSanh 및 txtText.text는 검색 할 문자열입니다. 텍스트 상자에서 가져옵니다. 색인 생성은 정상입니다! 왜냐하면 내가 색인을 생성 할 때 QueryParser를 사용하여 하나의 필드를 검색해야하기 때문이다. 그러나 지금 나는 다른 2 개의 색인의 색인에있는 2 개의 분야에서 찾아야한다. – Nam

답변

3

대신 QueryParser을 사용해 볼 수 있습니까? TermQuery 사용

BooleanQuery booleanQuery = new BooleanQuery(); 

var noidungQuery = new QueryParser(version, "Noidung", analyzer) 
    .Parse(PhanSoSanh); 
var dapaQuery = new QueryParser(version, "Dapa", analyzer) 
    .Parse(txtText.Text.ToString().Trim()); 

booleanQuery.Add(noidungQuery, Occur.MUST); 
booleanQuery.Add(dapaQuery, Occur.MUST); 

answer에서 상기 한 바와 같이, 제로 결과를 일으키는 @SimonSvensson 의해 기재로서, 인덱스에 대해 텍스트 원료를 보낸다.

+0

색인에 2 개의 필드가 있습니다 ("Noidung", "Dapa"). 이제 "Noidung"필드를 검색 한 다음 결과를 "Dapa"로 검색하고 싶습니다. 나는 booleanQuery를 사용하지만 결과에서 주목할만한 결과를 얻지 못했습니까? 도와주세요? – Nam

+0

@ rae1n 안녕하세요. 내 질문을보십시오 제발 http://stackoverflow.com/questions/16906689/filter-not-working-with-text-values-lucene-3-0-3. 아무도 Lucene 게시물에 답장을하지 않습니다. – Huzaifa