Wiem, że elasticsearch bierze pod uwagę długość pola przy obliczaniu wyniku dokumentów wyszukanych przez zapytanie. Im krótsze pole, tym większa masa (patrz The field-length norm).Jak mogę zwiększyć normę długości pola w wyniku funkcji elastycznego wyszukiwania?
Podoba mi się to zachowanie: kiedy szukam iphone
, jestem znacznie bardziej zainteresowany iphone 6
niż w Crappy accessories for: iphone 5 iphone 5s iphone 6
.
Teraz chciałbym spróbować zwiększyć te rzeczy, powiedzmy, że chcę podwoić jego znaczenie.
Wiem, że można zmodyfikować wynik za pomocą function score, i myślę, że mogę osiągnąć to, co chcę, przez script score.
Próbowałem dodać kolejną normę pole długości do punktacji jak ten:
{
"query": {
"function_score": {
"boost_mode": "replace",
"query": {...},
"script_score": {
"script": "_score + norm(doc)"
}
}
}
}
Ale nie udało mi się źle, otrzymuję ten błąd: [No parser for element [function_score]]
EDIT:
Mój pierwszy błąd był że nie zawinąłem wyniku funkcji w "zapytaniu". Teraz edytowałem powyższy kod. Mój nowy błąd mówi
GroovyScriptExecutionException[MissingMethodException
[No signature of method: Script5.norm() is applicable for argument types:
(org.elasticsearch.search.lookup.DocLookup) values:
[<[email protected]>]
Possible solutions: notify(), wait(), run(), run(), dump(), any()]]
EDIT: I, pod warunkiem pierwszą odpowiedź, ale mam nadzieję na lepszy