SolrNET localParams(用于标记filterQuery)导致具有多个值的异常

时间:2013-08-15 11:06:00

标签: solr solrnet

我正在尝试在SolrNET实现中实现localParams,但是当我们尝试在具有多个值的查询中使用localParams为字段添加前缀时遇到问题。

我们正在尝试使用localParams标记和排除过滤器。有关详细信息,请参阅:http://wiki.apache.org/solr/SimpleFacetParameters#Tagging_and_excluding_Filters

为了实现这一点,我们需要为filter / facet字段标记filterQuery(在下面称为field_name),并在facetField中排除标记。 facetField对标记的排除效果很好,但是当选择多个值时,我们遇到了filterQuery的问题。

我发现生成的查询字符串的区别如下:

没有localParams:

fq=field_name:"value1,value2"

使用localParams:

fq=({!paramKey=paramValue}field_name:"value1" OR {!paramKey=paramValue}field_name:"value2")

预期:

fq={!paramKey=paramValue}field_name:"value1,value2"

我们通过调用SolrInstance.Query(ISolrQuery query, QueryOptions options)启动Solr查询,受此问题影响的过滤查询可在QueryOptions.FilterQueries集合中找到,如下所示:

SolrNet.SolrQueryInList
    .FieldName: {!paramKey=paramValue}field_name
    .List
        .string[]
            "value1",
            "value2"

localParam已经/ .FieldName属性作为前缀。这不起作用,可能是因为Solr不能将{!paramKey=paramValue}field_name识别为有效的FieldName,这似乎是引发异常的原因。

任何人都可以提供有关如何在不解决此问题的情况下为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添加前缀。

0 个答案:

没有答案