在Lucene.Net中,如何在特定字段的任何一个术语列表上指定匹配项?
在Lucene.Net中,我需要创建一个查询,将搜索限制为特定字段的特定术语列表 例如,我需要“AutoMake”是“Ford”或“Chevy”。因此,只要“AutoMake”的价值是这两种价值之一,我们就很好 下面是我如何形成布尔查询的,但我认为这是不对的:在Lucene.Net中,如何在特定字段的任何一个术语列表上指定匹配项?,lucene,lucene.net,Lucene,Lucene.net,在Lucene.Net中,我需要创建一个查询,将搜索限制为特定字段的特定术语列表 例如,我需要“AutoMake”是“Ford”或“Chevy”。因此,只要“AutoMake”的价值是这两种价值之一,我们就很好 下面是我如何形成布尔查询的,但我认为这是不对的: var query1 = new TermQuery(new Term("AutoMake", "Ford")); var query2 = new TermQuery(new Term("AutoMake", "Chevy")); v
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);
那里的“必须”有效地解决了这个问题,所以“汽车制造商”必须是“福特”和“雪佛兰”,这是错误的。(我读了一些关于布尔语从句“应该”的文章,但我认为这也不对。)
本质上,我需要一个布尔子句运算符来表示“OR”。我需要一种方法来封装两个查询,这样,如果其中一个是真的,那么整个查询就是真的?(因为,我有多个这样的查询作为子句输入到一个更大的查询中。)
这是最棒的
var query = new AnyOfTheseTermsQuery();
query.Add(new Term("AutoMake", "Ford"));
query.Add(new Term("AutoMake", "Chevy"));
这就是我要找的。这是否存在?我认为“应该”是这类查询的正确运算符。设置一个小索引来测试这一点可能是值得的,但当我查看文档时,它似乎正是您所追求的
祝你好运,是,用SHOULD子句将这两个术语添加到布尔查询中。这意味着查询将查找这两个术语中的任何一个。然后使用MUST子句将该查询添加到父布尔查询,这意味着子查询必须与文档匹配