为什么Lucene.NET 3.0.3中的BooleanQuery什么都没有返回?

时间:2013-03-16 15:35:09

标签: c# lucene lucene.net booleanquery

我正在使用Lucene.NET 3.0.3搜索两个字段(我有两个字段名为“Noidung”,“Dapa”),我在C#中使用BooleanQuery来实现此目的,但是当我运行此代码时,没有任何结果返回,我确信搜索源没有任何问题,因为我测试了它。那么使用Lucene.NET 3.0.3的人可以提供一些解释吗?

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但结果没有返回?帮我?

1 个答案:

答案 0 :(得分: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);

正如@SimonSvensson所提到的那样,使用TermQuery将原始文本发送到索引,导致零结果,如answer中进一步解释的那样。