2016-10-28 2 views
1

Ich habe drei Felder - eines der Integer-Typ (Feld1) und zwei der Dezimal-Typ (Feld2, Feld3). Ich möchte nach allen Feldern abfragen können. Diese separaten Abfragen schön arbeiten in meiner Situation:Elasticsearch und PHP. Combine match und multi_match in einer Abfrage

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

und diese Abfrage funktioniert gut:

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

Wenn aber ich kombiniere sie:

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

];

Ich erhalte eine Fehlermeldung:

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

Also, was ist falsch und wie kann ich es beheben?

PS. In Bezug auf die SQL, ist das, was ich achive wollen:

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

von übrigens, es ist eine vereinfachte Abfrage. In der realen Welt werde ich viel mehr Felder haben, also muss ich wirklich 'multi_match' verwenden. – Jacobian

Antwort

1

Sie sie mit bool queries

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

kombinieren sollte entspricht "OR", während Muss entspricht "AND"

Verwandte Themen