SolrNET localParams(用于标记filterQuery)导致多值异常
我试图在SolrNET实现中实现localParams,但在使用多个值的查询中尝试使用localParams作为字段前缀时遇到了问题 我们正在尝试使用localParams来标记和排除过滤器。有关更多信息,请参阅 为了实现这一点,我们需要为我们的filter/facet字段(以下称为field_name)标记filterQuery,并排除facet字段中的标记。标记的facetField排除非常有效,但当选择多个值时,filterQuery会出现问题 我发现生成的查询字符串中的差异如下: 没有localParams:SolrNET localParams(用于标记filterQuery)导致多值异常,solr,solrnet,Solr,Solrnet,我试图在SolrNET实现中实现localParams,但在使用多个值的查询中尝试使用localParams作为字段前缀时遇到了问题 我们正在尝试使用localParams来标记和排除过滤器。有关更多信息,请参阅 为了实现这一点,我们需要为我们的filter/facet字段(以下称为field_name)标记filterQuery,并排除facet字段中的标记。标记的facetField排除非常有效,但当选择多个值时,filterQuery会出现问题 我发现生成的查询字符串中的差异如下: 没有l
fq=field_name:"value1,value2"
fq=({!paramKey=paramValue}field_name:"value1" OR {!paramKey=paramValue}field_name:"value2")
使用localParams:
fq=field_name:"value1,value2"
fq=({!paramKey=paramValue}field_name:"value1" OR {!paramKey=paramValue}field_name:"value2")
预期:
fq={!paramKey=paramValue}field_name:"value1,value2"
我们通过调用:SolrInstance.query(ISolrQuery查询,QueryOptions选项)
启动Solr查询,受此问题影响的筛选器查询可在QueryOptions.filterquerys
集合中找到,定义如下:
SolrNet.SolrQueryInList
.FieldName: {!paramKey=paramValue}field_name
.List
.string[]
"value1",
"value2"
localParam的前缀为.FieldName
属性。这不起作用,可能是因为Solr没有将{!paramKey=paramValue}字段_name
识别为有效的字段名,这似乎就是引发异常的原因
任何人都可以就如何在不出现此问题的情况下为SolrNET实现localParams提供任何建议。该实现对单个值运行良好,但对多个值抛出以下异常:
[SolrNet.Exceptions.InvalidFieldException] = {"Bad Request"}
我们正在使用以下版本:
SolrNET:v0.3.0
Solr:v4.3.0
将localParams应用于filterQueries的代码如下所示:
foreach (var filterQuery in parameters.FilterQuery)
{
if (parameters.LocalParams.Any(x => x.Field == filterQuery.Field && x.QueryType == QueryType.Filter))
{
var valueDictionary = parameters.LocalParams.Where(x => x.QueryType == QueryType.Filter && x.Field == filterQuery.Field).ToDictionary(param => param.Action, param => param.Value);
filterQuery.Field = new SolrQuery(new LocalParams(valueDictionary) + filterQuery.Field).Query;
}
}
上面的代码在filterQueries上迭代,并使用localParams语法作为.Field的前缀。逗号分隔的值在这里不正确。另请参见,我建议不要依赖于任何SolrNet对象的变异。它们最终都是不变的。