tutorial query aws elasticsearch lucene

query - elasticsearch tutorial



Elasticsearch: "function_score" con "boost_mode": "replace" ignora el puntaje de la funciĆ³n (1)

Estoy tratando de modificar los puntajes de la consulta normal con diferentes funciones definidas en function_score.

Para saber qué puntajes calculados por mis funciones son, especifico "boost_mode" para "replace". Sin embargo, esto hace que todos los puntajes sean constantes: todos iguales a 1.

Considera seguir consulta:

{ "query": { "function_score": { "query": { "terms": { "name": ["men", "women"] } }, "score_mode": "avg", "functions": [ { "filter": { "terms": { "name": ["men","man"] } }, "weight": 2 } ], "boost_mode": "replace" } }, "explain": true, "from": 0 }

Espero obtener diferentes puntajes aquí, dependiendo de si el campo "nombre" contiene "hombres" o "hombre". Tales documentos están presentes en el índice seguro.

Además, si estoy especificando "explicar": verdadero, obtengo una puntuación en la explicación diferente a la que se muestra en el campo de puntuación _score:

{ "_shard":0, "_node":"ro26nlDuTfiTaIlIgHqg4g", "_index":"products10", "_type":"product_basic", "_id":"0c25fc90433481aac0cce62dd1a21e06", "_score":1, "_source":{ "category":[ "Chicago Blues", "Blues", "Styles", "Digital Music" ], "site_name":"www.amazon.com", "name":"Who''s That Women?", "url":"http://rads.stackoverflow.com/amzn/click/B001125F8I", "price":0.99, "reviews":[ ], "breadcrumb":"Digital Music", "in_stock":true, "features":[ ], "pic_urls":[ "http://ecx.images-amazon.com/images/I/51CvgPMwtsL.jpg", "http://ecx.images-amazon.com/images/I/51CvgPMwtsL.jpg" ], "name_semantic_core":[ "Women ?", "?" ], "category_path":"/Chicago Blues/Blues/Styles/", "visit_datetime":"2014-11-04T11:50:34.169779", "detected_category":"Digital Music" }, "_explanation":{ "value":1.2249949, "description":"function score, no filter match, product of:", "details":[ { "value":1.2249949, "description":"product of:", "details":[ { "value":2.4499898, "description":"sum of:", "details":[ { "value":2.4499898, "description":"weight(name:women in 6181332) [PerFieldSimilarity], result of:", "details":[ { "value":2.4499898, "description":"score(doc=6181332,freq=1.0), product of:", "details":[ { "value":0.67790973, "description":"queryWeight, product of:", "details":[ { "value":7.228071, "description":"idf(docFreq=238699, maxDocs=120967660)" }, { "value":0.09378847, "description":"queryNorm" } ] }, { "value":3.6140356, "description":"fieldWeight in 6181332, product of:", "details":[ { "value":1, "description":"tf(freq=1.0), with freq of:", "details":[ { "value":1, "description":"termFreq=1.0" } ] }, { "value":7.228071, "description":"idf(docFreq=238699, maxDocs=120967660)" }, { "value":0.5, "description":"fieldNorm(doc=6181332)" } ] } ] } ] } ] }, { "value":0.5, "description":"coord(1/2)" } ] }, { "value":1, "description":"queryBoost" } ] } }

Aquí la explicación muestra "valor": 1.2249949, mientras que "_score" es 1.

¿Qué estoy haciendo mal? ¿Cómo puedo obtener los puntajes reales calculados usando las funciones de functinon_score [antes de combinar con las puntuaciones de consulta originales]?

Actualización: esto es lo que obtengo si se encuentra un producto que coincida. Por alguna razón, la puntuación es 1 mientras que debería ser 2:


En su muestra, la función no coincide con ningún documento: function score, no filter match, Además, a partir de la documentación cuando se usa replace, sucede lo siguiente: only function score is used, the query score is ignored . Entonces, la situación es así: el filtro no coincide, por lo que no se computa ninguna puntuación, y replace hará que la puntuación de la consulta se ignore y use la puntuación del filtro (que no existe porque no lo hizo). partido).

Y cuando la función no coincide, el valor predeterminado de la función es 1 . Puede verificar esto con "boost_mode": "sum" . Mi opinión es que esta es la razón por la que ves una puntuación de 1 .

En cuanto al comportamiento avg , esto no me parece bien y, lo más probable, es un error. Lo informé aquí: https://github.com/elastic/elasticsearch/issues/13732