ブールクエリLucene.net
(バージョン2.9)で複数のクエリを組み合わせると問題が発生します。Lucene.net(バージョン2.9)のブールクエリと複数のクエリを組み合わせたときの問題
私が索引付けした文書構造を参照してください。
ID Make Model Price MakeDate CreatedBy
1 Ford Fiesta 240000 06/23/2011 anil
2 Ford Focus 250000 06/20/2011 anil
3 Vauxhall Astra 200000 06/21/2011 anil
4 Ford Focus LX 230000 06/21/2011 anilkumar
5 Ford Focus XI 260000 06/20/2011 anil
私の意図は、フィールドすなわちモデルのいずれかでfocus
が含まれているか確認します..フィールドとCreatedBy
がAnil
に等しいのレコードを取得することです。
このため、次のクエリを書いています。
WildcardQuery query4 = new WildcardQuery(new Term("Make", "*focus*"));
WildcardQuery query5 = new WildcardQuery(new Term("Model", "*focus*"));
var queryParser3 = new QueryParser(Version.LUCENE_29, "CreatedBy", analyzer1);
var query3 = queryParser3.Parse("anil");
objBool.Add(query3, BooleanClause.Occur.MUST);
objBool.Add(query4, BooleanClause.Occur.SHOULD);
objBool.Add(query5, BooleanClause.Occur.SHOULD);
これを実行すると、実際には2番目と5番目の2つのレコードのみを取得する必要があります。しかし、私は4回目以外の4回目のレコードを取得しています。
CreatedBy
のすべてのレコードを返すことは、Anil
と同じです。
必要な結果を得る方法と、変更が必要なことを教えてください。
スコアリングのない検索では、同じBooleanQueryのMUSTとSHOULD句を持つ必要はありません。文書に 'cat'が含まれていてSHOULDに 'dog'が含まれていなければならない場合、SHOULD句は余分なものです。しかし、クエリがスコアリングを行う場合、SHOULD句を増やすには、MUST句を含むSHOULD句を含めることができます。だから、「猫」を持っていなければならないすべての文書を検索することができますが、「犬」もある文書もスコアを上げることができます。 – Jegschemesch