1

SolrNET 実装で localParams を実装しようとしていますが、複数の値を持つクエリで localParams をフィールドの前に付けようとすると問題が発生します。

フィルターのタグ付けと除外に localParams を使用しようとしています。詳細については、 http ://wiki.apache.org/solr/SimpleFacetParameters#Tagging_and_except_Filtersを参照してください。

これを実現するには、filter/facet フィールド (以下、field_name と呼ばれる) の filterQuery にタグを付け、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"

への呼び出しで Solr クエリを開始しています。この問題の影響を受けるフィルタ クエリは、以下に定義さSolrInstance.Query(ISolrQuery query, QueryOptions options)れているコレクションで見つけることができます。QueryOptions.FilterQueries

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

localParam には.FieldNameプロパティのプレフィックスが付いています。{!paramKey=paramValue}field_nameおそらくSolrが有効な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 を反復処理し、.Field の前に localParams 構文を追加します。

4

0 に答える 0