È possibile ordinare utilizzando una funzione di hash di un campo univoco (ad esempio id) e un salt casuale. A seconda di come realmente casuale i risultati dovrebbero essere, si può fare qualcosa di primitivo come:
{
"query" : { "query_string" : {"query" : "*:*"} },
"sort" : {
"_script" : {
"script" : "(doc['_id'].value + salt).hashCode()",
"type" : "number",
"params" : {
"salt" : "some_random_string"
},
"order" : "asc"
}
}
}
o qualcosa di sofisticato come
{
"query" : { "query_string" : {"query" : "*:*"} },
"sort" : {
"_script" : {
"script" : "org.elasticsearch.common.Digest.md5Hex(doc['_id'].value + salt)",
"type" : "string",
"params" : {
"salt" : "some_random_string"
},
"order" : "asc"
}
}
}
Il secondo esempio produrrà risultati più casuali, ma sarà un po 'più lento .
Per questo approccio al lavoro è necessario memorizzare il campo _id
. In caso contrario, la query avrà esito negativo con NullPointerException
.
Vorrei memorizzare la stringa sul client allora? Ad esempio in un cookie? In modo che quando l'utente chiama per pagina 2, lo stesso ordine viene mantenuto? – Yeggeps
La stringa salt deve essere generata e memorizzata sul layer che mantiene la sessione dell'utente. Può essere lo stesso posto in cui si memorizza la query dell'utente o il numero di pagina attualmente visualizzato. Può essere anche un cookie. – imotov