2017-06-01 2 views
0

Ich habe diese elastische Abfrage, die die gewünschten Ergebnisse für terms.letter_score nicht zurückgibt. Ich bin mir sicher, dass es im Index Übereinstimmungen gibt. Diese Abfrage (ausschließlich letter_score) gibt die erwarteten gefilterten Ergebnisse zurück, aber nichts mit letter_score. Der einzige Unterschied ist (soweit ich das beurteilen kann), dass die cat_id Werte eine Liste von ganzen Zahlen gegen Strings sind. Irgendwelche Ideen von was könnte das Problem hier sein? Ich versuche im Grunde, es mit jedem Wert aus der letter_score Liste übereinstimmen.Terms Abfrage keine Ergebnisse für die Liste der Zeichenfolgen

Dank

{ 
    "size": 10, 
    "query": { 
     "bool": { 
     "filter": [ 
      { 
       "terms": { 
        "cat_id": [ 
        1, 
        2, 
        4 
        ] 
       } 
      }, 
      { 
       "terms": { 
        "letter_score": [ 
        "A", 
        "B", 
        "E" 
        ] 
       } 
      } 
     ] 
     } 
    } 
} 

Antwort

1

Es ist wie Ihr letter_score Feld klingt, ist vom Typ text und somit analysiert wurde, so dass die Token A, B und E haben die als a, b und e so terms gespeichert worden sind Abfrage wird ihnen nicht entsprechen.

Auch wenn das der Fall ist, ist die Wahrscheinlichkeit hoch, dass das Token a zur Indexierungszeit ignoriert wurde, weil es ein Stoppwort ist und der standard Analysator (Standard) sie ignoriert (wenn Sie ES 5+ verwenden).

Ein erster Ansatz ist es, eine match Abfrage statt terms, wie diese verwenden:

{ 
    "match": { 
     "letter_score": "A B E" 
    } 
} 

Wenn das immer noch nicht funktioniert, schlage ich vor, dass Sie die Abbildung Ihrer letter_score Feld keyword ändern (erfordert Reindexing Ihrer Daten) und dann Ihre Abfrage funktioniert so, wie es jetzt ist

Verwandte Themen