Ich habe viele Dokumente mit einer rate
Eigenschaft, die ein Array mit Min/Max-Bereich der akzeptierten Preise ist.Elasticsearch: Wie Abfrage für Bereich basierend auf Array mit Max/Min-Werten
{ "rate": [250, 700] }
Ich möchte nun Abfragen durchführen einen anderen Bereich, zum Beispiel die Bereitstellung:
{
"bool": {
"must": [
"range": {
"rate": { "from": 100, "to": 500 }
}
]
}
}
Das feine und gibt immer Werte arbeitet, die innerhalb des Bereichs mindestens einer der Werte bereitgestellt, das ist das, was Ich will.
Für alle Ergebnisse ist die Bewertung jedoch gleich. Es spielt keine Rolle, ob der Wert dem des Dokuments entspricht oder ob er nur den Bereich für einige Zahlen erreicht. Wie unten dargestellt:
{
"_id": "one",
"_score": 1",
"_source": { "rate": [250,750] }
},
{
"_id": "two",
"_score": 1",
"_source": { "rate": [200,350] }
},
{
"_id": "three",
"_score": 1",
"_source": { "rate": [500,750] }
}
Gibt es eine Möglichkeit, eine Bereichssuche bietet einen anderen Bereich wie diese zu verbessern?
Danke, @pickypg, ich hatte eigentlich vergessen, die Bereichsabfrage hinzuzufügen, als ich die Frage stellte (behoben). Leider habe ich keinen Zugriff auf Groovy, da ich den AWS ES-Service nutze. Würdest du an irgendeine andere Idee denken, die es zum Laufen bringen könnte? Ich könnte die Daten anders modellieren, wenn das hilft, aber ich fand, dass getrennte Werte wie 'rate_from' und' rate_to' noch komplizierter wurden.Die Idee ist, dass je mehr es einem Bereich innerhalb des Bereichs entspricht oder den höheren Wert bewertet (wenn 100500 zur Verfügung gestellt werden, würde eine 100,500 Eingabe 100% Übereinstimmung sein, während 400, 700 nicht so viel ist. – zanona