Ho fatto una query complessa utilizzando la popolarità per migliorare i risultati dei documenti sui social media utilizzando Elasticsearch. La query funziona davvero bene ei risultati principali sono sempre centrati sulla query e con elementi interessanti.Risultati diversificati sulla ricerca Elasticsearch
Tuttavia ha un problema, per alcune query i primi risultati sono tutti dallo stesso utente.
Mi piacerebbe downscore un documento se lo stesso utente è stato recuperato su un documento più alto. In questo modo mi aspetto di avere più diversificazione dei risultati.
Nota che non voglio che vengano rimossi, poiché in alcuni casi potrebbe essere ancora interessante trovare più documenti dello stesso utente, ma vorrei che si trovassero in una posizione più bassa.
Qualcuno può suggerire un modo per farlo funzionare?
Come suggerito in alcuni commenti che ho aggiornare una (versione semplificata) della mia interrogazione:
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"
}};
PS: alcuni documenti che possono essere interessanti, come si parla di diversità, ma io non sono sicuro di come applicare:
- https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-sampler-aggregation.html?q=sampler
- https://lucene.apache.org/core/5_1_0/misc/org/apache/lucene/search/DiversifiedTopDocsCollector.html
Puoi mostrare la tua domanda reale e alcuni risultati che stai ottenendo attualmente? Qual è anche il tipo di campo che descrive il tuo utente (cioè stringa o numerico)? – Val
@Val Sto usando una query sul punteggio funzione su elasticSearch 2.1. User.id è una stringa. –
Ti dispiace condividere la tua domanda reale? – Val