C# 在Lucene.Net中搜索具有值(x、y或z)及更多值的字段名
我有一个数字字段。 它可以有一些价值<代码>0,7,12,16,18101++,但每个文档中只有一个值 我想检索值为7、12和16的文档 我曾经尝试过使用带有术语的布尔查询,但没有成功。我相信这是因为我不是在寻找字符串 我尝试过使用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
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);
}
返回布尔查询;
}
如果有更好的答案,我很想看看