如何使用Lucene.Net查询集合中的术语,类似于SQL的IN运算符?
我们正在尝试搜索文档在可能值的集合中是否具有特定字段值,
field:[value1, value2, value3, ..., valueN]
如果它匹配任何输入值,它将返回该元素,类似于SQL的IN()
运算符。
这类似于range
查询,但元素不一定描述范围。
使用Lucene.Net API的一个例子是,
var query = new QueryParser(version, "FieldName", analyzer).In("value1", "value2", "value3");
这在Lucene.Net中是否可行?
field:value1 field:value2 ....
应该做的伎俩。 默认情况下,所有术语都是OR
。
以编程方式,您可以尝试,
public static Query In(string fieldName, IEnumerable 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 collection) { var query = new QueryParser(version, propertyName, analyzer).Parse(string.Join(" ", collection)); return query; }
基于,
field:value1, value2, value3, ..., valueN
将返回集合中至少有一个值的任何文档。