を持っている場合、私は複数のクエリを適用し、検索してLucene.netインデックスを持っている:Lucene.netフィルタインデックスレコードが特定の値
BooleanQuery filterQuery = new BooleanQuery();
if (searchDto.SubCategoryId != Guid.Empty)
{
TermQuery tq = new TermQuery(new Term("SubCategoryId", searchDto.SubCategoryId.ToString()));
filterQuery.Add(tq, Occur.MUST);
}
if (!string.IsNullOrEmpty(searchDto.SearchPhrase))
{
var parser = new MultiFieldQueryParser
(Version.LUCENE_30, new[] { "Title", "Description", "SubCategoryName", "LongDescription" }, analyzer);
var query = parseQuery(searchDto.SearchPhrase, parser);
filterQuery.Add(query, Occur.MUST);
}
topDocs = searcher.Search(filterQuery, null, hits_limit);
これは素晴らしい作品。たとえば、サブカテゴリIDを渡すと、サブカテゴリにのみ一致します。しかし、フィルタ値を送信するかどうかではなく、インデックスレコードにそのフィールドの値があるかどうかに基づいて一致するクエリを作成するにはどうすればよいですか。
たとえば、luceneインデックスレコードフィールドの1つはIsBundle
です。今、IsBundle
がtrue
の場合、RelationshipId
がsearchDto.RelationshipId
と一致する場合はレコードを送信します。 IsBundle
がfalse
の場合、私はRelationshipId
を気にしません。だから、私の最終的な結果はIsBundle
がtrue
あるレコードとRelationshipId
マッチ私のsearchDto.RelationshipId
、あなたはロジックを折りたたむ場合IsBundle
がfalse