multiple - elasticsearch wildcard query
elasticsearch aumentar la importancia de la coincidencia de frase exacta (5)
¿Hay alguna manera en elasticsearch para aumentar la importancia de la frase exacta que aparece en el documento?
Por ejemplo, si estaba buscando la frase "desarrollador web" y si las palabras "desarrollador web" aparecían juntas, se verían aumentadas en 5 en comparación con "web" y "desarrollador" apareciendo por separado en todo el documento. Por lo tanto, cualquier documento que contenga "desarrollador web" en conjunto aparecerá primero en los resultados.
Como alternativa a la respuesta de javanna , podría hacer algo similar con las cláusulas must
y should
dentro de una consulta bool
:
{
"query": {
"bool": {
"must": {
"match": {
"field": "web developer",
"operator": "and"
}
},
"should": {
"match_phrase": {
"field": "web developer"
}
}
}
}
}
No se ha probado, pero creo que la cláusula " must
" aquí coincidirá con los resultados que contengan "web" y "developer" y la cláusula " must
" tendrá una puntuación más alta en las frases que coincidan con "web developer".
Creo que su comportamiento por defecto ya con la consulta de coincidencia "o" operador. Filtrará la frase "desarrollador web" primero y luego términos como "web" o "develeper". Aunque puede aumentar su consulta utilizando las respuestas anteriores. Corrígeme si me equivoco.
Puede combinar diferentes consultas entre sí utilizando una consulta bool , y también puede darles un impulso diferente. Digamos que tiene una consulta de coincidencia regular para ambos términos, independientemente de sus posiciones, y luego una consulta de frase con un impulso mayor.
Algo como lo siguiente:
{
"query": {
"bool": {
"should": [
{
"match": {
"field": "web developer"
}
},
{
"match_phrase": {
"field": "web developer",
"boost": 5
}
}
],
"minimum_number_should_match": 1
}
}
}
Puede intentar utilizar rescore para ejecutar una coincidencia de frase exacta en sus resultados iniciales. De la documentación:
"Rescoring puede ayudar a mejorar la precisión al reordenar solo los documentos principales (por ejemplo, 100 - 500) devueltos por las fases de consulta y post_filter, utilizando un algoritmo secundario (generalmente más costoso), en lugar de aplicar el algoritmo costoso a todos los documentos en el índice. "
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-rescore.html
Utilicé la siguiente consulta de muestra en mi caso, que está funcionando. ¡Aporta resultados exactos + difusos, pero los exactos son impulsados!
{ "query": {
"bool": {
"should": [
{
"match": {
"name": "pala"
}
},
{
"fuzzy": {
"name": "pala"
}
}
]
}}}