-1

Lucene.NET 3.0.3を使用して2つのフィールド(「Noidung」、「Dapa」という名前の2つのフィールドがあります)を検索しています。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);

この回答TermQueryでさらに説明されているように、@ SimonSvenssonが言及しているように、を使用すると、テキストがインデックスに対して生で送信され、結果がゼロになります。

于 2013-03-16T16:54:21.847 に答える