Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Lucene.Net中搜索具有值(x、y或z)及更多值的字段名_C#_Lucene.net - Fatal编程技术网

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

C# 在Lucene.Net中搜索具有值(x、y或z)及更多值的字段名,c#,lucene.net,C#,Lucene.net,我有一个数字字段。 它可以有一些价值0,7,12,16,18101++,但每个文档中只有一个值 我想检索值为7、12和16的文档 我曾经尝试过使用带有术语的布尔查询,但没有成功。我相信这是因为我不是在寻找字符串 我尝试过使用numeriRangeFilter.NewIntRange(),并将最小值和最大值设置为我感兴趣检索的实际值 我有以下代码: public static Query AddRangeFilter(this Query query, string fieldName, IEnu

我有一个数字字段。 它可以有一些价值<代码>0,7,12,16,18101++,但每个文档中只有一个值

我想检索值为7、12和16的文档

我曾经尝试过使用带有术语的布尔查询,但没有成功。我相信这是因为我不是在寻找字符串

我尝试过使用
numeriRangeFilter.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;
}
publicstaticqueryaddrangefilter(此查询、字符串字段名、IEnumerable validAlternative)
{
如果(!validAlternatives.Any())
返回查询;
foreach(有效替代方案中的var替代方案)
{
var filter=numeriRangeFilter.NewIntRange(字段名,1,可选,可选,true,true);
query=新的FilteredQuery(查询,筛选);
}
返回查询;
}
如果我在列表中输入一个单数,这很好。但是如果我输入更多,它自然不起作用,因为它正在寻找一个值为7和12的文档,它不存在,因为所有文档都只有一个单数

如何搜索7或12?
请注意,
AddRangeFilter
中的
此查询已包含部分查询。

我找到了一种解决方法。它并不完美,如果您有更多这样的查询,它可能会非常低效

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;
}
publicstaticqueryaddrangefilter(此查询、字符串字段名、IEnumerable validAlternative)
{
如果(!validAlternatives.Any())
返回查询;
var booleanQuery=new booleanQuery{MinimumNumberShouldMatch=1};
foreach(有效替代方案中的var替代方案)
{
var thing=numeriRangeFilter.NewIntRange(字段名,1,可选,可选,true,true);
Add(newfilteredquery(query,thing),execute.SHOULD);
}
返回布尔查询;
}
如果有更好的答案,我很想看看