如何使用Lucene查询集合中的术语.Net,类似于SQL's的IN操作符

本文关键字:SQL 操作符 IN 类似于 Net 查询 Lucene 何使用 集合 术语 | 更新日期: 2023-09-27 17:54:11

我们正在尝试搜索文档是否在可能值的集合中具有特定字段值,

field:[value1, value2, value3, ..., valueN]

,如果它匹配任何输入值,则返回该元素,类似于SQL的IN()操作符。

这将类似于range查询,但元素不一定描述一个范围。

一个使用Lucene的例子。Net API将是,

var query = new QueryParser(version, "FieldName", analyzer).In("value1", "value2", "value3");

这在Lucene.Net中可能吗?

如何使用Lucene查询集合中的术语.Net,类似于SQL's的IN操作符

field:value1 field:value2 ....应该可以做到这一点。默认情况下,所有术语都是OR

在编程上,您可以尝试:
public static Query In(string fieldName, IEnumerable<string> values)
{
    var query = new BooleanQuery();
    foreach (var val in values)
    {
        query.Add(new TermQuery(new Lucene.Net.Index.Term(fieldName, val)), BooleanClause.Occur.SHOULD);
    }
    return query;
}

正如@I4V所提到的,Lucene OR是默认的,所以这应该会给你想要的结果,

public Query In(string propertyName, IEnumerable<string> collection)
{
    var query = new QueryParser(version, propertyName, analyzer).Parse(string.Join(" ", collection));
    return query;
}
基于,

field:value1, value2, value3, ..., valueN

将返回集合中至少有一个值的任何文档。