So che elasticsearch tiene conto della lunghezza di un campo quando si calcola il punteggio dei documenti recuperati da una query. Più corto è il campo, maggiore è il peso (vedere The field-length norm).Come posso aumentare la norma della lunghezza del campo nel punteggio della funzione elasticsearch?
Mi piace questo comportamento: quando cerco iphone
sono molto più interessato a iphone 6
rispetto a Crappy accessories for: iphone 5 iphone 5s iphone 6
.
Ora, vorrei provare ad aumentare questa roba, diciamo che voglio raddoppiare la sua importanza.
So che è possibile modificare il punteggio utilizzando lo function score e credo di poter ottenere ciò che voglio tramite script score.
ho cercato di aggiungere un altro norma di campo di lunghezza per il punteggio in questo modo:
{
"query": {
"function_score": {
"boost_mode": "replace",
"query": {...},
"script_score": {
"script": "_score + norm(doc)"
}
}
}
}
Ma non sono riuscito male, questo errore: [No parser for element [function_score]]
EDIT:
Il mio primo errore è stato che non avevo avvolto il punteggio della funzione in una "query". Ora ho modificato il codice qui sopra. Il mio nuovo errore dice
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: ho fornito una prima risposta, ma sto sperando in una migliore