如何使用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 

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