2017-06-29 7 views
0

Ich versuche derzeit, eine Abfrage, die mehrere Felder in einem Filter entspricht nach dem Umschalten auf elastische Suche 5 anders zu erstellen, aber sie scheinen nicht zu arbeiten. Dies ist, was ich denke, denke, die Abfrage sein sollte:ElasticSearch - gefilterte Abfrage mit mehreren Klauseln ES 5

 query: { 
      bool: { 
       must: [{ match: { name: 'athing' }}], 
       filter: [ 
        { bool: { 
         must: [ 
          { term: { ownerId: 123} }, 
          { term: { itemId: 3453} }, 
         ] 
        }}, 
        { bool: { 
         minimum_should_match: 1, 
         must: [ 
          { term: { groupId: 123565} }, 
          { term: { groupId: 5555} }, 
         ] 
        }} 
       ] 
      } 
     } 

In diesem Fall werden die Ergebnisse der nicht-analysierte Artikel und Gruppen-ID übereinstimmen muss. Im vorherigen Code wurde die elastische Suche 1.5 verwendet und der Abgleich wurde durch eine Sammlung von 'und' und 'oder' innerhalb des Filters durchgeführt. Das scheint nicht mehr zu funktionieren.

Ich möchte auch so machen, dass die Abfrage in der Lage ist, jemanden mit einer der übergebenen Gruppen-ID (anstatt alle von ihnen) zu bekommen. Ich habe das in der zweiten bool-Abfrage des Filters versucht.

Idealerweise möchte ich eine Abfrage, die das Spiel ‚athing‘ hat, gehört zu den Besitzer-ID 123 und der Artikel-ID von 3453, die entweder in Gruppen-ID ist 123.565 oder 5555.

Antwort

1

versuchen

bool: 
    must: [ term: ownerId, term: itemId] 
    should: [ term: groupId, term: groupId ] 
    minimum_should_match: 1 
+0

Das scheint zu funktionieren, danke! Eine Frage, von der ich verstehe, dass die Abfrage bedeutet, dass die Ergebnisse mindestens dem Muss und dem Soll entsprechen müssen. Bedeutet das Ergebnisse, die mit dem Most übereinstimmen, aber nicht mit den Soll-Bedingungen? –

Verwandte Themen