在Lucene.Net中,如何在特定字段的任何一个术语列表中指定匹配?

时间:2011-08-17 01:05:15

标签: lucene lucene.net

在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"));

这就是我要找的东西。这是否存在?

2 个答案:

答案 0 :(得分:2)

我认为“SHOULD”是此类查询的正确运算符。设置一个小索引来测试它可能是值得的,但是当我查看文档时,它似乎正是你所追求的。

祝你好运,

答案 1 :(得分:1)

是将这两个术语添加到带有SHOULD子句的BooleanQuery中。这意味着查询将查找其中任何一个术语。然后使用MUST子句将该查询添加到父BooleanQuery,这意味着子查询必须与文档匹配。