tutorial que elastic lucene elasticsearch search-engine

lucene - que - Elasticsearch-¿Cómo se normaliza el puntaje cuando se combinan la consulta regular y la función_core?



elasticsearch requirements (1)

Idealmente, lo que intento lograr es asignar ponderaciones a consultas tales que query1 constituye el 30% del puntaje final y query2 consitutes otro 70%, por lo que para lograr el puntaje máximo un documento debe tener la puntuación más alta posible en query1 y query2. Mi estudio de la documentación no dio pistas sobre cómo lograr esto, así que intentemos resolver un problema más simple.

Considere una consulta en la siguiente forma:

{ "query": { "bool": { "should": [ { "function_score": { "query": {"match_all": {}}, "script_score": { "script": "<some_script>", } } }, { "match": { "message": "this is a test" } } ] } } }

El script puede devolver un número arbitrario (pensar-> puede devolver algo como 12392002).

¿Cómo me aseguro de que el resultado del guión no domine el puntaje general?

¿Hay alguna forma de normalizarlo? Por ejemplo, en lugar de puntaje de guión, devuelva la proporción a max_script_score (¿logrado por el documento con puntaje más alto?


Recientemente estoy trabajando en un problema como este también. No pude encontrar ninguna documentación formal sobre este tema, pero cuando investigo los resultados con "explicar api", parece que "queryNorm" no se aplica al puntaje que proviene directamente del campo "funciones". Esto significa que no puede normalizar directamente el valor del script.

Sin embargo, creo que encuentro una solución un poco difícil a este problema. Si combina este campo de función con una consulta como lo hace (match_all query) y le da un impulso a esa consulta, la normalización está funcionando en esta consulta, es decir, la multiplicación de estos dos puntajes, de la consulta normalizada y del script, nos dará una total normalización. Para una mejor explicación, la consulta será como:

{ "query": { "bool": { "should": [ { "function_score": { "query": {"match_all": {"boost":1}}, "functions": [ { "script_score": { "script": "<some_script>", }}], "score_mode": "sum", "boost_mode": "multiply" } }, { "match": { "message": "this is a test" } } ] } } }

Esta respuesta no es una solución adecuada para su problema, pero creo que puede jugar con esta consulta para obtener el resultado requerido. Mi sugerencia es usar la API de explicación, tratar de comprender qué se devuelve, examinar los parámetros que afectan la puntuación final y jugar con la secuencia de comandos y aumentar los valores para obtener una solución optimizada.

Por cierto, "consulta de rescore" puede ayudar mucho a obtener esa proporción de% 30-% 70 en el puntaje final: Documentación oficial