【问题标题】:In Lucene.Net, How do I specify a match on any one of a list of terms for a specific field?在 Lucene.Net 中,如何在特定字段的术语列表中的任何一个上指定匹配项?
【发布时间】:2011-08-17 01:05:15
【问题描述】:

在 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”必须同时是“福特”和“雪佛兰”,这是错误的。 (我已经阅读了 BooleanClause "SHOULD" 的一些内容,但我认为这也不对。)

基本上,我需要一个用于“OR”的 BooleanClause 运算符。我需要一种封装两个查询的方法,以便如果其中一个为真,那么整个查询为真? (因为,我有多个这样的查询作为子句输入到更大的查询中。)

这就是很棒的东西。

var query = new AnyOfTheseTermsQuery();
query.Add(new Term("AutoMake", "Ford"));
query.Add(new Term("AutoMake", "Chevy"));

这就是我要找的。这存在吗?

【问题讨论】:

    标签: lucene lucene.net


    【解决方案1】:

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

    祝你好运,

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-31
        相关资源
        最近更新 更多