Ich versuche, eine Abfrage für elasticsearch zu erstellen. Die Bedingungen: Es gibt immer einen Kundenfilter. Es gibt ein Feld "name", das bei Übereinstimmung die höchste Punktzahl erzeugen sollte, das nächstbeste Feld sollte "category" und dann "description" sein. Aber ein Ergebnis sollte zurückgegeben werden, auch wenn die Suche nichts in "Name" oder "Kategorie" findet, sondern nur in "Beschreibung".elasticsearch: mehrere Felder mit Boosts
Was ich versuche:
$query = [
'filtered' => [
'filter' => [
'term' => [ 'customer' => $selectedCustomer ]
],
'query' => [
'bool' => [
'should' => [
'match' => [
'name' => [
'query' => $val,
'boost' => 7
]
]
],
'should' => [
'match' => [
'category' => [
'query' => $val,
'boost' => 3
]
],
],
'should' => [
'match' => [
'description' => [
'query' => $val,
'boost' => 1
]
],
],
]
]
]
];
aber dies scheint nur die Ergebnisse mit einem Spiel in „Beschreibung“ zurückzukehren. Was mache ich falsch? Irgendwelche Hinweise?
Diese Serie von drei 'sollte' ein einzelnes Array erstellen, das die drei 'match's enthält? (Wie ' "Bool": { "sollte": [ { "match": { "FIELD": "TEXT" } }, { "match": { "FIELD":„TEXT " } }, {} ... ] }') –
.... ja, jetzt, wo ich es sehe, natürlich, die Sinn macht. Aber wie würde ich es richtig machen? – Chi
Ich weiß nicht, PHP, aber ich bin sicher, dass so die Abfrage aussehen sollte. –