Lucene.Net 搜索具有值(x 或 y 或 z)等的字段名称



我有一个数字字段。 它可以有一些值;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;
}

如果有更好的答案,我很想看到它们。

最新更新