2017-01-24 4 views
0

Dies ist meine ursprüngliche Abfrage dsl, und die Gesamtzahl der Treffer war 8.981.Elasticsearch Query + Filter

GET /{index}/{document}/_search 
{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "match": { 
      "title": { 
       "query": "blue shoes", 
       "boost": 2 
      } 
      } 
     }, 
     { 
      "match": { 
      "description": { 
       "query": "blue shoes", 
       "operator": "and", 
       "boost": 1 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

Ich möchte einen Filter zu dieser Abfrage hinzufügen.

GET /{index}/{document}/_search 
{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "match": { 
      "title": { 
       "query": "blue shoes", 
       "boost": 2 
      } 
      } 
     }, 
     { 
      "match": { 
      "description": { 
       "query": "blue shoes", 
       "operator": "and", 
       "boost": 1 
      } 
      } 
     } 
     ], 
     "filter": { 
     "terms": { 
      "store.id": [ "store_a.com", "store_b.com" ] 
     } 
     } 
    } 
    } 
} 

Jetzt seine Gesamt-Treffer ist 15.989 (increased). Und ich sortiere das Ergebnis nach Ergebnis in asc (ich weiß nicht, warum es asc nicht desc ist), gibt es Dokumente, die 0 bewertet wird.

Ich denke, es gibt keine Filterung durch Abfrage, weil es bereits gefiltert ist.

Kann ich 0 gewertete Dokumente aus dem Ergebnis entfernen?

+0

Aus Neugier, hat meine Antwort helfen oder habe ich etwas vermisst? – nikoshr

+0

@nikoshr Entschuldigung für meine späte Antwort. Ich löste dieses Problem, indem ich einfach einen der Übereinstimmungen (in diesem Fall 'Titel') von 'sollte' zu 'muss' verschieben. – mayTree

Antwort

0

Um einen Filter hinzuzufügen, verwenden Sie in Ihrer Bool-Abfrage must clause, um einen obligatorischen Wert hinzuzufügen. Versuchen Sie:

GET /{index}/{document}/_search 
{ 
    "query": { 
     "bool": { 
      "must": [ 
       "terms": { 
        "store.id": [ "store_a.com", "store_b.com" ] 
       } 
      ], 
      "should": [ 
       { 
        "match": { 
         "title": { 
          "query": "blue shoes", 
          "boost": 2 
         } 
        } 
       }, 
       { 
        "match": { 
         "description": { 
          "query": "blue shoes", 
          "operator": "and", 
          "boost": 1 
         } 
        } 
       } 
      ] 
     } 
    } 
}