4

ブランド名を次のように分析された形式で保存する特定のドキュメントがあります: {"name":"Samsung"} {"name":"Motion Systems"}。「s」で始まる用語検索が必要な場合があり、両方のドキュメントが得られます。「s」クエリで始まる完全なフィールドのみが必要な別のケースでは、「samsung」のみが返されます。名前フィールドを分析して保存しました。エラスティック検索でクエリから始まる完全なフィールドを実行できる方法はありますか?

4

1 に答える 1

6

multi_fieldを使用して、2 つの異なる方法でフィールドにインデックスを付ける必要があります。すでに行っているようにトークン化すると、トークナイザーによって生成されたトークンに基づいて一致します。必要な 2 番目のタイプの一致については、フィールドの分析を無効にしてそのままインデックスを作成するか、同じ結果を生成するKeywork トークナイザーを使用する必要があります。マッピングは次のようになります。

{
    "your_type" : {
        "properties" : {
            "brand" : {
                "type" : "multi_field",
                "fields" : {
                    "brand" : {"type" : "string", "index" : "analyzed"},
                    "untouched" : {"type" : "string", "index" : "not_analyzed"}
                }
            }
        }
    }
}

その後、両方のフィールドで検索できます。で検索するbrandと、すでに持っている一致が得られますが、で検索するbrand.untouchedと、2 番目の一致が得られます。複数のクエリをまとめるにはさまざまな方法があります。たとえば、bool queryを参照してください。

于 2012-10-14T11:08:02.910 に答える