搜索 Lucene.Net 具有值(x 或 y 或 z)及更多的字段名

Search Lucene.Net for fieldname which has value (x or y or z) and more

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

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