2013-03-16 97 views
-1

我使用Lucene.NET 3.0.3來搜索兩個字段(我有兩個字段名爲「Noidung」,「Dapa」),我在C#中使用BooleanQuery來做到這一點,但是當我運行這個代碼沒有任何結果返回,我敢肯定沒有任何錯誤的源搜索,因爲我測試了它。那麼使用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 
} 

我有2個場中的索引( 「Noidung」, 「DAPA」)。現在我想在「Noidung」字段進行搜索,然後用「Dapa」搜索結果。我使用booleanQuery但沒有返回結果?幫我?

+2

您創建術語查詢的方式表明您將進行完全匹配,既涉及套管和標記化。您是否使用KeywordAnalyzer編制文檔索引? PhanSoSanh和txtText.Text的值是什麼?你爲什麼不使用QueryParser? – sisve 2013-03-16 15:43:00

+0

PhanSoSanh和txtText.text是我在文本框中搜索的字符串。索引是好的!因爲我使用QueryParser在一個字段中搜索時,我索引沒問題。但是現在我必須在2個數據索引中的2個字段中搜索不同的數據。並且你看到 – Nam 2013-03-16 16:22:46

回答

3

您可以試試QueryParser嗎?

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); 

使用TermQuery由@SimonSvensson,這是造成零分的結果,如在本answer進一步解釋發送針對索引中的文本生,如提。

+0

我在索引中有2個字段(「Noidung」,「Dapa」)。現在我想在「Noidung」字段進行搜索,然後用「Dapa」搜索結果。我使用booleanQuery但沒有返回結果?幫我? – Nam 2013-03-19 12:03:44

+0

@ rae1n嗨。你可以請看看我的問題http://stackoverflow.com/questions/16906689/filter-not-working-with-text-values-lucene-3-0-3。沒有人回覆Lucene帖子。 – Huzaifa 2013-06-04 16:37:16