3

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

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

如果它与任何输入值匹配,它将返回元素,类似于 SQL 的IN()运算符。

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

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

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

这在 Lucene.Net 中可行吗?

4

2 回答 2

4

field:value1 field:value2 ....应该做的伎俩。默认情况下,所有术语都是ORed。

以编程方式,您可以尝试,

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;
}
于 2013-01-18T18:56:29.677 回答
0

正如@I4V 提到的,LuceneOR的默认条款,所以这应该会给你想要的结果,

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

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

于 2013-01-21T13:39:37.703 回答