2013-03-16 93 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