Elasticsearch-Abfragezeiterhöhung führt zu unzureichender Reihenfolge
Das ES-Suchergebnis für den angegebenen Suchbegriffone two three
scheint nach der Bewerbung falsch zu seinboost
-Funktion pro Keyword. Bitte helfen Sie mir, meine "fehlerhafte" Abfrage zu ändern, um das unten beschriebene "erwartete Ergebnis" zu erzielen. Ich bin auf ES 1.7.4 mit LUCENE 4.10.4
Aufladekriterien -three
wird als das wichtigste Schlüsselwort angesehen:
word - boost
---- -----
one 1
two 2
three 3
ES Indexinhalt - Nur MySQL-Dump anzeigen, um den Beitrag zu verkürzen
mysql> SELECT id, title FROM post;
+----+-------------------+
| id | title |
+----+-------------------+
| 1 | one |
| 2 | two |
| 3 | three |
| 4 | one two |
| 5 | one three |
| 6 | one two three |
| 7 | two three |
| 8 | none |
| 9 | one abc |
| 10 | two abc |
| 11 | three abc |
| 12 | one two abc |
| 13 | one two three abc |
| 14 | two three abc |
+----+-------------------+
14 rows in set (0.00 sec)
Erwartetes ES-Abfrageergebnis - Der Benutzer sucht nach one two three
. Ich bin nicht besorgt über die Reihenfolge der gleichwertigen Datensätze. Ich meine, wenn Datensatz 6 und 13 die Plätze tauschen, macht es mir nichts aus.
+----+-------------------+
| id | title | my scores for demonstration purposes
+----+-------------------+
| 6 | one two three | (1+2+3 = 6)
| 13 | one two three abc | (1+2+3 = 6)
| 7 | two three | (2+3 = 5)
| 14 | two three abc | (2+3 = 5)
| 5 | one three | (1+3 = 4)
| 4 | one two | (1+2 = 3)
| 12 | one two abc | (1+2 = 3)
| 3 | three | (3 = 3)
| 11 | three abc | (3 = 3)
| 2 | two | (2 = 2)
| 10 | two abc | (2 = 2)
| 1 | one | (1 = 1)
| 9 | one abc | (1 = 1)
| 8 | none | <- This shouldn't appear
+----+-------------------+
14 rows in set (0.00 sec)
Unerwartetes ES-Abfrageergebnis - Leider ist das, was ich bekomme.
+----+-------------------+
| id | title | _score
+----+-------------------+
| 6 | one two three | 1.0013864
| 13 | one two three abc | 1.0013864
| 4 | one two | 0.57794875
| 3 | three | 0.5310148
| 7 | two three | 0.50929534
| 5 | one three | 0.503356
| 14 | two three abc | 0.4074363
| 11 | three abc | 0.36586377
| 12 | one two abc | 0.30806428
| 10 | two abc | 0.23231897
| 2 | two | 0.12812772
| 1 | one | 0.084527075
| 9 | one abc | 0.07408653
+----+-------------------+
ES query
curl -XPOST "http://127.0.0.1:9200/_search?post_dev" -d'
{
"query": {
"bool": {
"must": {
"match": {
"title": {
"query": "one two three"
}
}
},
"should": [
{
"match": {
"title": {
"query": "one",
"boost": 1
}
}
},
{
"match": {
"title": {
"query": "two",
"boost": 2
}
}
},
{
"match": {
"title": {
"query": "three",
"boost": 3
}
}
}
]
}
},
"sort": [
{
"_score": {
"order": "desc"
}
}
],
"from": "0",
"size": "100"
}'
Einige weitere Testanfragen:
DiesAbfrag erzeugt kein Ergebnis.DiesAbfrag bestellt nicht richtig wie es scheintHie.