0

エラスティック サーチのリスト内のフィールドのフィルタリングに問題があります。検索とフィルタリングのために単純な JSON オブジェクトのインデックスを作成しています。

インデックスが作成されるオブジェクトの例は次のとおりです。

{ 
    "id" : 1,
    "name" : "My Inventory",
    "description" : "This is a piece of inventory.",
    "sizes" : [ "big", "small" ],
    "geos" : [ { "country" : "US", "fullName" : "United States" } ]
}

ID、名前、説明、およびサイズで簡単にフィルタリングできますが、地域でフィルタリングしようとすると、レンガの壁にぶつかります。以下は、私が使用しようとしているフィルターです。私を正しい方向に導くためのあらゆる種類の指針に感謝します。ありがとう!

curl -XPOST 'localhost:9200/stuff/inventory/_search?pretty=true' -d '
    {
        "fields" : [ "name" ],
        "filter" : {
            "terms" : { "geos.country" : [ "US" ] }
        }
    }
'
4

1 に答える 1

0

デフォルトでは、文字列フィールドが分​​析されます (「検索可能な用語に分解」は、Elasticsearch のドキュメントで説明されています)。用語フィルタは正確に一致しますが、フィールドには変更された可能性のあるバージョンが含まれるため、これは用語フィルタでは機能しません。

"index" : "not_analyzed"マッピングで設定することにより、Elasticsearch にそれを行わないように指示できます。geos フィールドのマッピングは次のようになります。

"geos" : { 
    "type" : "object",
    "properties" : {
        "country" : { "type" : "string", "index" : "not_analyzed" },
        "fullName" : { "type" : "string" } 
    } 
}

使用方法によっては、 fullName を に設定することnot_analyzedもできます。用語クエリまたはフィルターで使用する場合は、分析しないでください。あいまい一致、スペル修正などを行う場合は、分析する必要があります。

于 2013-10-18T15:01:01.593 に答える