Hola, tengo un campo personalizado llamado scores, que computa la cantiad de items vendidos en una cantidad de tiempo determinada. Necesito hacer una busqueda y que los resultados esten en orden aleatorio teniendo en cuenta ese campo.
Usando sort puedes decidir qué campo usar para ordenar los resultados (incluso puedes hacer tu propio script de ordenación - cuidado! Si haces tu propio script deberías de testearlo para comprobar que no afecta al rendimiento).
Lo que me descoloca es que los scores sean un objecto, y lo que comentas de que el orden sea aleatorio. Puedes elaborar un poco más en el requisito que tienes?
Hola Ismael gracias por responder. Los scores son un objeto por que podes pedir los items mas vendidos del ultimo mes, 3 o 6 meses. Entonces decidimos que sea un objeto. Lo que pasa es que no todos lo items tiene scores. Si un item nunca fue vendido, no tiene scores.
Ahora bien, lo que necesito es obtener 50 resultados, que si tengan scores, pero en modo random. Osea de los que tiene scores que venga el item 5,2,1,4,3. La segunda consulta me va a traer el 4,1,5,3,2. Los resultados en modo random.
Entendido Leandro! En Elasticsearch puedes crear random_scores . Si encapsulas tu query en un function score random, deberías de tener el efecto que quieres.
Aparte, entiendo que sólo quieres documents que tengan un score interno, correcto? En ese caso, puede usar la query exists que te permite recuperar documents que contienen un campo específico.
Combinando las dos anteriores tendrías un score random, devolviendo sólo documents que tienen un score interno.
la razón es que estás dando un seed a la función de random_score: el seed se usa para que los resultados sean repetibles (i.e, genera una lista aleatoria utilizando ese seed, y el mismo seed siempre genera la misma lista). Si no añades ese parámetro, internamente usará un seed diferente en cada ocasión, lo que lleva a que los resultados sean ordenados de forma diferente en cada ejecución de la consulta.
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.