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 構文を追加します。