2016-10-28 13 views
1

私は、整数型(field1)とdecimal型(field2、field3)の2つの3つのフィールドを持っています。私はすべてのフィールドで照会できるようにしたい。これらの別々のクエリは私の状況で素敵な仕事:弾性検索とPHP。 1つのクエリでmatchとmulti_matchを組み合わせる

$params = [ 
    'index' => 'test_index', 
    'type' => 'text_index_type', 
    'body' => [ 
     'query' => [ 
      'match' => [ 
       'field1' => '12' 
      ] 
     ] 
    ] 
]; 

と、このクエリがうまく機能:

$params = [ 
    'index' => 'test_index', 
    'type' => 'text_index_type', 
    'body' => [ 
     'query' => [ 
      'multi_match' => [ 
       'query' => '345', 
       'fields' => ['field2', 'field3'] 
      ] 
     ] 
    ] 
]; 

場合は、しかし、私はそれらを結合:

$params = [ 
    'index' => 'test_index', 
    'type' => 'text_index_type', 
    'body' => [ 
     'query' => [ 
      'match' => [ 
       'field1' => '12' 
      ], 
      'multi_match' => [ 
       'query' => '345', 
       'fields' => ['field2', 'field3'] 
      ] 
     ] 
    ] 

]。

私はエラーを取得する:

Uncaught exception 'Elasticsearch\Common\Exceptions\BadRequest400Exception' ... [match] malformed query, unexpected [FIELD_NAME] found [multi_match]

だから、私はそれをどのようなことが間違っているとどのように修正することができますか?

PS。 SQLの面では、これは私がachiveしたいものです。

SELECT * FROM mytable where field1 = 12 or field2 = 345 or field3 = 345 
+0

で「AND」ところで、単純化されたクエリです。現実世界で私はもっと多くのフィールドを持っているので、本当に 'multi_match'を使う必要があります。 – Jacobian

答えて

1

あなたが相当すべきbool queries

$params = [ 
    'index' => 'test_index', 
    'type' => 'test_index_type', 
    'body' => [ 
     'query' => [ 
      'bool' => [ 
       'should' => [ 
        [ 'match' => [ 'field1' => '12' ] ], 
        [ 'multi_match' => [ 'query' => '345', 
             'fields' => ['field2', 'field3']] ], 
       ] 
      ] 
     ] 
    ] 
]; 

とそれらを組み合わせることができますに「OR」必見相当しながら、

関連する問題