query - Resultados diversificados en la búsqueda Elasticsearch
elasticsearch query match phrase (1)
Realicé una consulta compleja usando la popularidad para mejorar los resultados de los documentos de redes sociales usando Elasticsearch. La consulta funciona realmente bien y los mejores resultados siempre se centran en la consulta y con elementos interesantes.
Sin embargo, tiene un problema, para algunas consultas los primeros resultados son todos del mismo usuario .
Me gustaría recalcular un documento si el mismo usuario se recuperó en un documento superior. De esta manera espero tener más diversificación en los resultados.
Tenga en cuenta que no quiero que se eliminen, ya que en algunos casos puede ser interesante encontrar más documentos del mismo usuario, pero me gustaría que estén en una posición inferior.
¿Alguien puede sugerir una forma de hacerlo funcionar?
Como sugerí en algunos comentarios, actualicé una (versión simplificada) de mi consulta:
query = {"function_score": {
"functions": [
{"gauss": {"createdAt":
{"origin": "now", "scale": "30d", "offset": "7d", "decay" :0.9 }
}},
{"gauss": {"shares.last.twitter_retweets_log":
{"origin": 4.52, "scale": 2.61, "decay" : 0.9}
}},
],
"query": {"bool":{"must":[
{"exists":{"field": "images"}},
{"multi_match":{"query": "foo boo", fields:["text", "link.title"]}}
]}},
"score_mode": "multiply"
}};
PD: algunos documentos que pueden ser interesantes, ya que hablan de diversidad, pero no estoy seguro de cómo aplicar:
Puede acoplar la muestra con la agregación top_hits
para obtener resultados diversificados.
{
"query": {
"match": {
"query": "iphone"
}
},
"size":0,
"aggs": {
"sample": {
"sampler": {
"shard_size": 200,
"field" : "user.id"
},
"aggs": {
"diversifiedMatches": {
"top_hits": {
"size":10
}
}
}
}
}
}
Hay algunas advertencias, por ejemplo:
1) La deduplicación es por fragmento no global
2) La elección del campo de diversificación debe ser un campo de valor único
3) Sin soporte para la paginación
4) No hay soporte para ordenar nada más que puntuación
Abordar los problemas anteriores sería difícil y requeriría una coordinación costosa / compleja internamente más más orientación del cliente sobre cuándo y dónde se pueden volver a presentar los resultados "duplicados" (¿página 2 ?, ¿página 3 ?, ¿cuántos?), Etc.