【发布时间】:2017-01-18 11:42:03
【问题描述】:
我有一个 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 索引记录字段之一是IsBundle。现在,如果IsBundle 是true,我想要记录如果RelationshipId 匹配我发送的searchDto.RelationshipId。如果IsBundle 是false,我不关心RelationshipId。所以我的最终结果是IsBundle 是true 和RelationshipId 匹配我的searchDto.RelationshipId 并且IsBundle 是false 的记录组合。
【问题讨论】:
标签: search lucene lucene.net