2016-09-15 4 views
0

私は、文字列の配列であるElasticsearchにインデックスを付けるフィールドを持っています。したがって、たとえば、ここに文字列配列が2つのレコードにどのように見えるかです:エラスティックの文字列配列で複数の値を検索する

Record 1: {"str1", str2", str3", "str4", "str5"} 

Record 2: {"str1", str2", str6", "str7", "str8"} 

質問1:私はこの配列内の複数の文字列を照会することができるようにしたいです。例えば、私の質問は "str1"、 "str2"です。検索パラメータとして "str3"を指定します。文字列配列にこれらの3つの文字列のいずれかが含まれているレコードを検索したい

質問2:上記のシナリオでは、レコード1よりもスコアが高いレコード3が返されますレコード1には2つしか存在しません)。

これはまったく可能ですか?クエリがどのように表示されるべきか、得点が私の言ったように機能するかどうかを教えてください。

答えて

1

次のことが可能なようan arrayなどのインデックスにそれらを、:

{ 
    "myArrayField": [ "str1", str2", str3", "str4", "str5" ], 
    ... 
} 

あなたは、その後、いくつかの方法を、照会することができるだろうというあなたのケースのための最も簡単な(分析される)match query

(分析されていない)
{ 
    "match" : { 
     "myArrayField" : "str1 str2 str3" 
    } 
} 

またはterms query

{ 
    "terms" : { 
     "myArrayField" : [ "str1", "str2", "str3" ] 
    } 
} 

およびはいの場合、より多くの検索語句との比較でスコアが高くなるため、レコード1はレコード2より高いスコアになります。

関連する問題