我正在使用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但结果没有返回?帮我?
答案 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中进一步解释的那样。