2016-07-24 6 views
0

I Elasticsearch 2.2.0 verwende und ich bin drin. Ich möchte das Ergebnis mit zwei Filtern suchen, aber es zeigt mir einen schwerwiegenden Fehler: Abfrage unterstützt nicht mehrere Felder.Mehrere Begriffe Filter funktioniert nicht auf Elasticsearch

Zwei Filter sind:

plocation: china 
pcategoryid: 0,20,21 

Hier ist mein Code:

$search = 'Doors'; 
$limit = 6; 
$params = [ 
    'index' => 'product', 
    'body' => [ 
     'query' => [ 
      "bool" => [ 
       "should" => [ 
        'multi_match' => [ 
         "fields" => [ 
          "pname", 
          "pmodel", 
          "pcategoryname", 
          "pmetakeyword" 
         ], 
         "query" => $search, 
         "type" => "phrase", 
         "boost" => 10 
        ], 
        'multi_match' => [ 
         "fields" => [ 
          "pname", 
          "pmodel", 
          "pcategoryname", 
          "pmetakeyword" 
         ], 
         "query" => $search, 
         "type" => "most_fields", 
         "fuzziness" => "1", 
         "boost" => 0 
        ] 
       ] 
      ], 
     ], 

     "filter" => [ 
      "bool" => [ 
       "must" => [ 
        "term" => [ 
         "ptypeid" => 1 
        ] 
       ], 
       "should" => [ 
        "term" => [ 
         "psearchstatus" => 1 
        ] 
       ], 
       "filter" => [ 
        "terms" => [ 
         "plocation" => ['china'], "pcategoryid" => [0,20,21] 
        ] 
       ] 
      ], 
     ], 
     "from" => ($page - 1) * $limit, 
     "size" => $limit 
    ], 
]; 
$client = Elasticsearch\ClientBuilder::create()->build(); 
$response = $client->search($params); 
$results = $response['hits']['hits']; 

Gibt es einen anderen Weg, um zu gehen, was ich zu tun versuchen, oder bin ich auf dem richtigen Weg?

+0

geben Sie bitte auch die Struktur des Index/Typs – Dekel

Antwort

-2

Das Problem ist die terms filter, die Sie anwenden versuchen. Wie die term Filter darüber akzeptiert es nur ein einzelnes Feld, aber mit einem Array von Werten.

"terms" => [ 
    "plocation" => ['china'], "pcategoryid" => [0,20,21] 
] 

sollte

seine
"terms" => [ 
    "plocation" => ['china'] 
], 
"terms" => [ 
    "pcategoryid" => [0,20,21] 
] 
+0

Keine Ahnung, warum dieser Downvoted von antrieb war, aber das ist das Problem. – pickypg

Verwandte Themen