2017-08-15 2 views
1

Ich bin mit dem folgenden Problem konfrontiert. Ich habe einige sortierte Abfragen für eine bestimmte Gruppe von Datensätzen in meinem Index, ähnlich der folgenden, wobei die term1 übereinstimmenden Werte pro Abfrage variieren, während sie für term2 für alle Abfragen statisch bleiben.Elasticsearch Gruppe sortierte kombinierte Abfrage

{ 
    "query": { 
     "bool": { 
      "must": { 
       "terms": { 
        "term1": [ "val1", "val2" ] 
       } 
      }, 
      "must_not": { 
       "terms": { 
        "term2": [ "val3", "val4" ] 
       } 
      } 
     } 
    }, 
    "sort": [ 
     { "sort_term": "desc" } 
    ], 
    "from": 0, 
    "size": 10 
} 

Gerade jetzt, ich bin der Durchführung all diese Abfragen getrennt und dann kombiniert und ihre Ergebnisse in Code schlurfend, etwas, das wie Sie wahrscheinlich nicht ideal sagen kann, ist. Ich habe mich gefragt, ob es eine Möglichkeit gibt, diese Abfragen in ElasticSearch zu kombinieren, während die gruppenbasierte Sortierung beibehalten wird.

Der Grund, warum ich die Sortierreihenfolge jeder einzelnen Abfrage beibehalten möchte, liegt darin, dass die Sortierwerte nicht einheitlich sind und ich nicht möchte, dass Ergebnisse aus verschiedenen Gruppen in der Ergebnismenge vergraben werden. Die einzige Lösung, die mir einfällt, wäre, alle Datensätze irgendwie neu zu verarbeiten und einen relativen Sortierwert basierend auf den Sortierwerten aller Datensätze in einer gegebenen Gruppe zu berechnen, aber diese Werte ändern sich sehr regelmäßig und der Index hat viele Platten, das wäre wahrscheinlich zuviel.

Alle Ideen würden sehr geschätzt werden!

Antwort

0

Sie können mehrere Begriffe im Sortierfeld verwenden. Wenn Sie die Abfrage kombinieren, würde ich zuerst nach _type sortieren, was eine Vermischung Ihrer Suchergebnisse verhindert. Das Sortierfeld Ihrer Abfrage sollte wie folgt aussehen:

"sort": [ 
    { "_type": "desc" }, 
    { "sort_term_query1": "desc" }, 
    { "sort_term_query2": "desc" }, 
], 
+0

Ich verstehe, dass ich mehrere Sortierausdrücke verwenden kann, aber in diesem Fall verwenden alle meine Abfragen denselben Sortierbegriff. Ich möchte jeden booleschen Ausdruck einzeln sortieren und die Ergebnisse mischen. – OrfeasZ

+0

Dann habe ich deine Frage nicht verstanden, es ist unklar, wie das Endergebnis sortiert werden soll. – MartinSchulze