1

エラスティック検索データセットに対してクエリを実行しようとしています。私の目標は、基準のいずれかに一致するすべてのレコードを取得することです。したがって、基本的には一連の OR です。私のクエリは次のようになります。

{
  "query" : {
    "filtered" : {
      "query" : {
        "match_all":{}
      }, 
      "filter" : { 
        "or" : [
          {"match" : {"field1" : ["value1", "value1.5"]}}, 
          {"match" : {"field2" : ["value2", "value2.5"]}}, 
          {"match" : {"field3" : ["value3", "value3.5"]}}, 
          {"match" : {"field4" : ["value4", "value4.5"]}}
        ]
      }
    }
  }
}

Field1-Field4 はすべてエラスティック サーチの配列として格納されます。クエリ値のいずれかが格納された配列内の値のいずれかと一致するすべての結果を取得する必要があります。

そして、それらの間に何かが一致する場合は結果を返す必要があります。誰でもこれの何が問題なのか指摘できますか? 彼らがそこにいることを知っているとき、私は何の結果も得ていません。

4

1 に答える 1

2

あなたはmatchフィルターのタイプとして使用していますが、それは私の知る限り存在しません。代わりに、現在の設定で代わりに使用できますtermshttp://www.elasticsearch.org/guide/reference/query-dsl/terms-query/

それで:

{
  "query" : {
    "filtered" : {
      "query" : {
        "match_all":{}
      }, 
      "filter" : { 
        "or" : [
          {"terms" : {"field1" : ["value1", "value1.5"]}}, 
          {"terms" : {"field2" : ["value2", "value2.5"]}}, 
          {"terms" : {"field3" : ["value3", "value3.5"]}}, 
          {"terms" : {"field4" : ["value4", "value4.5"]}}
        ]
      }
    }
  }
}
于 2013-05-23T09:52:48.203 に答える