2017-05-12 4 views
0

ich die folgende Abfrage in ElasticsearchElasticsearch liefert alle Ergebnisse mit Should und Begriff Abfrage

SELECT * FROM TABLE WHERE feed_id =1 AND brand='Samsung' OR brand='Apple iPhone'

ich diese JSON Abfrage für diesen

`verwendet ausführen wollen`

"bool" : { 



"should":[ 
    { 
     "multi_match": 
      { 
      "query":"LG", 
      "operator":"and", 
      "fields":"brand" 
      } 
    }, 

     { 
     "multi_match": 
      { 
      "query":"Samsung", 
      "operator":"and", 
      "fields":"brand" 
      } 
    }, 

    { 
     "multi_match": 
    { 
     "query":"Nokia", 
     "operator":"and", 
     "fields":"brand" 
    } 
    } 


    ], 



    "filter": { 
     "bool": { 
      "must": [ 

       { "term": { "feed_id":1}} 
      ] 

     } 
    } 

}`` 

Dies gibt alle Ergebnisse zurück.

Das ist mein Mapping

"model": { "type": "text", "fields": { "autocomplete": { "type": "text", "analyzer": "autocomplete" }, "keyword": { "type": "keyword" } } }

jedoch, wenn ich den "Filter" Term i die gewünschten Ergebnisse zu entfernen.

Was ist falsch an meiner Abfrage?

Ich benutze ES 5.0

+0

Können Sie vollständige Zuordnungen für Zuordnungen von 'brand' und' feed_id' bereitstellen? – avr

Antwort

0

Diese Abfrage. Denken Sie nicht, dass Sie multi_match brauchen, wie Sie auf einem einzelnen Feld suchen.

{ 
"query": { 
    "bool": { 
    "must": [ 
     { 
      "term": { 
       "feed_id": 1 
      } 
     }, 
     { 
      "terms": { 
       "brand": [ 
       "LG", 
       "Samsung", 
       "Nokia" 
       ] 
      } 
     } 
     ] 
    } 
    } 
} 
+0

Danke, aber wie kann ich das gleiche Ergebnis für die exakte Übereinstimmung erreichen? Ich habe das gleiche Problem dann. – erwinnandpersad

+0

@erwinnandpersad. Bitte werfen Sie einen Blick auf die bearbeitete Antwort – Richa

+0

danke @Rich, wenn ich das Feld zu Model.keyword ändern, dann funktioniert es nicht auf einen Satz. Zum Beispiel "Galaxy S7" gibt keine Datensätze – erwinnandpersad

0

Es funktioniert jetzt:

ich den minimum_should_match Filter hinzugefügt, und jetzt funktioniert es ..

Siehe Abfrage, ob jemand in der gleichen Ausgabe laufen

`

{ 

     "multi_match": 
      { 
      "query":"Nokia", 
      "operator":"and", 
      "fields":"brand" 
      } 
    }, 

     { 

     "multi_match": 
      { 
      "query":"Wifi", 
      "operator":"and", 
      "fields":"name" 
      } 
    }, 

    { 
     "multi_match": 
    { 
     "query":"LG K10", 
     "operator":"and", 
     "fields":"name" 
    } 
    } 


    ], 
    "minimum_should_match":"1" 

} 
Verwandte Themen