-1

我正在使用 Lucene.NET 3.0.3 搜索两个字段(我有两个名为“Noidung”、“Dapa”的字段),我BooleanQuery在 C# 中使用它,但是当我运行此代码时没有返回结果,我确信要搜索的源没有问题,因为我对其进行了测试。那么使用 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 但没有返回结果?帮我?

4

1 回答 1

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会根据索引发送原始文本,这导致结果为零,如本答案中进一步解释的那样。

于 2013-03-16T16:54:21.847 回答