我有一个数字字段。 它可以有一些值;0,7,12,16,18,101 ++
,但每个文档只有一个这些值
我想检索值为 7、12 和 16 的文档
我尝试使用带有术语的BooleanQuery,但我没有运气。我相信这是因为我不是在搜索字符串。
我尝试使用NumericRangeFilter.NewIntRange(
,并将最小值和最大值设置为我有兴趣检索的实际值。
我有这个代码:
public static Query AddRangeFilter(this Query query, string fieldName, IEnumerable<int> validAlternatives)
{
if (!validAlternatives.Any())
return query;
foreach (var alternative in validAlternatives)
{
var filter = NumericRangeFilter.NewIntRange(fieldName, 1, alternative, alternative, true, true);
query = new FilteredQuery(query, filter);
}
return query;
}
如果我在列表中发送一个单数,这很好用。但是,如果我发送更多,它自然不起作用,因为它随后正在寻找t.ex。值为 7 和 12 的文档,不存在,因为所有文档只有一个单数。
如何搜索 7 或 12? 请注意,AddRangeFilter
中的this Query query
已经包含部分查询。
我找到了解决它的方法。它并不完美,如果你有更多的这些,它可能效率很低。
public static Query AddRangeFilter(this Query query, string fieldName, IEnumerable<int> validAlternatives)
{
if (!validAlternatives.Any())
return query;
var booleanQuery = new BooleanQuery { MinimumNumberShouldMatch = 1 };
foreach (var alternative in validAlternatives)
{
var thing = NumericRangeFilter.NewIntRange(fieldName, 1, alternative, alternative, true, true);
booleanQuery.Add(new FilteredQuery(query, thing), Occur.SHOULD);
}
return booleanQuery;
}
如果有更好的答案,我很想看到它们。