在Lucene.Net中,我需要创建一个查询,将搜索限制为特定字段的特定术语列表。
例如,我需要“AutoMake”为“Ford”或“Chevy”。所以,只要“AutoMake”的值是这两个中的一个,我们就会很好。
以下是我如何形成我的BooleanQuery,但我不认为这是正确的:
var query1 = new TermQuery(new Term("AutoMake", "Ford"));
var query2 = new TermQuery(new Term("AutoMake", "Chevy"));
var thisFilter = new BooleanQuery();
thisFilter.Add(query1, BooleanClause.Occur.MUST);
thisFilter.Add(query2, BooleanClause.Occur.MUST);
“必须”有效地“查询”查询,因此“AutoMake”必须 “Ford”和“Chevy”,这是错误的。 (我已经对BooleanClause“SHOULD”做了一些阅读,但我认为这也不对。)
基本上,我需要一个“OR”的BooleanClause运算符。我需要一种方法来封装两个查询,以便如果其中一个是真的,那么整个查询是真的吗? (因为,我有多个这些查询作为子句提供给更大的查询。)
这就是真棒。
var query = new AnyOfTheseTermsQuery();
query.Add(new Term("AutoMake", "Ford"));
query.Add(new Term("AutoMake", "Chevy"));
这就是我要找的东西。这是否存在?
答案 0 :(得分:2)
我认为“SHOULD”是此类查询的正确运算符。设置一个小索引来测试它可能是值得的,但是当我查看文档时,它似乎正是你所追求的。
祝你好运,答案 1 :(得分:1)
是将这两个术语添加到带有SHOULD子句的BooleanQuery中。这意味着查询将查找其中任何一个术语。然后使用MUST子句将该查询添加到父BooleanQuery,这意味着子查询必须与文档匹配。