Elasticsearch: Orden aleatorio sembrado (solicitud de función)

Creado en 27 jul. 2011  ·  24Comentarios  ·  Fuente: elastic/elasticsearch

Implementación de ordenación de resultados aleatorios con semilla opcional que permite la recreación del orden aleatorio, es decir, a través de "páginas" cuando se usa paginación (desde, tamaño).

>feature v0.90.4 v1.0.0.Beta1

Comentario más útil

Ahora se admite el orden aleatorio como parte de las nuevas consultas de puntuación de funciones. ejemplo de solicitud:

curl -XGET 'localhost:9200/_search' -d '{
  "query": {
    "function_score" : {
      "query" : { "match_all": {} },
      "random_score" : {}
    }
  }
}';

o con una semilla (para una paginación casi consistente):

curl -XGET 'localhost:9200/_search' -d '{
  "query": {
    "function_score" : {
      "query" : { "match_all": {} },
      "random_score" : { "seed" : 1376773391128418000 }
    }
  }
}';

Obtenga más información sobre las consultas de puntuación de función aquí: #3423

Todos 24 comentarios

Estoy realmente interesado en esto, ¿alguien intentó implementar esto?

Discutí esto brevemente con kimchy en ese momento y su respuesta fue que no sería difícil de hacer. Definitivamente un gran candidato a función.
He implementado esto almacenando un conjunto de números "aleatorios", por ejemplo, cada objeto tiene, digamos, 20 enteros adicionales (cada uno de estos es un campo de clasificación denominado rand1, rand2, rand3, etc.). Para cada usuario, selecciono (calculo según la fecha y la UA) el número 1...20 que se usa para seleccionar qué campo "aleatorio" se usará. Cuando se agregan nuevos objetos, cada uno simplemente recibe un conjunto aleatorio. úmeros. Tú decides cuántos estados aleatorios necesitas. Recuerde que el orden inverso en este caso duplica el número de estados aleatorios. Esta solución tiene que ver con la percepción.

¡Frio! Intentaré eso.

¿Ya se ha implementado esto en la versión actual de ES?

@uboness , ¿podemos obtener su última confirmación para esto?

Esto sería genial si se agregara.

BUMP++

Ahora se admite el orden aleatorio como parte de las nuevas consultas de puntuación de funciones. ejemplo de solicitud:

curl -XGET 'localhost:9200/_search' -d '{
  "query": {
    "function_score" : {
      "query" : { "match_all": {} },
      "random_score" : {}
    }
  }
}';

o con una semilla (para una paginación casi consistente):

curl -XGET 'localhost:9200/_search' -d '{
  "query": {
    "function_score" : {
      "query" : { "match_all": {} },
      "random_score" : { "seed" : 1376773391128418000 }
    }
  }
}';

Obtenga más información sobre las consultas de puntuación de función aquí: #3423

Esto es inmensamente útil. Espero que veamos esto en v0.90.4 en cuestión de días...

@emptyflask , ¿puede contarnos un poco sobre su caso de uso real para esto? Tengo mucha curiosidad y sería bueno tener un par de casos de uso en la documentación de referencia.

@s1monw Actualmente estoy haciendo esto con Solr, y es lo único que está atando mi migración a ES en esa aplicación. Hay unos pocos miles de ideas enviadas por los usuarios que reciben votos de otros usuarios, por lo que para que cada idea tenga las mismas posibilidades de aparecer en la primera página, queremos que la vista predeterminada se ordene aleatoriamente, aunque esté paginada y sea coherente para cada usuario. Usar la identificación del usuario actual como una semilla aleatoria resuelve este problema muy bien.

:+1: 10 puntos para @uboness

:+1: ¿Llegará esto a la 0.90.4?

@brupm ya está en la rama 0.90, así que sí, estará en 0.90.4

Característica impresionante, ¡gracias!

Otro caso de uso es una página aleatoria similar a Wikipedia: junto con algunos criterios de búsqueda (para evitar páginas de bajo interés), es mucho más rápido que consultar la base de datos para obtener una identificación aleatoria.

@s1monw ¿ Alguna idea de cuándo se lanzará 0.90.4? ¡Gracias!

planeamos lanzar 0.90.4 a principios de la próxima semana.

"clasificar": [
{
"nombre": {
"orden": "aleatorio"
}
}
],

No está trabajando :-(

Tal vez esto sea un error con el cliente php, pero pasar esta consulta como una matriz no funciona.

$json = '{
"consulta": {
"puntuación_función": {
"funciones": [
{
"puntuación_aleatoria": {

                   }
                }
             ],
             "boost_mode": "replace",
             "query": {
                "match_all": {}
             }
          }
       }
    }';

    $qry = array(
        'query' => array(
            'function_score' => array(
                'functions' => array(
                    array('random_score' => array())
                ),
                'query' => array(
                    array('match_all' => array())
                )
            )
        )
    );

    $searchParams['body'] = $qry;

    $retDoc = $elastic->search($searchParams);

¿Cómo iterar todos los elementos en cada página con la función de puntuación aleatoria?

De la misma manera que iteraría sobre cualquier otro conjunto de resultados. La función
La puntuación solo afecta al atributo de puntuación de cada documento, lo que reordena la
resultados Todo lo demás se mantiene igual.
El 16 de mayo de 2014 a las 4:28 p. m., "Yao Li" [email protected] escribió:

¿Cómo iterar todos los elementos en cada página con la función de puntuación aleatoria?


Responda a este correo electrónico directamente o véalo en Gi tHubhttps://github.com/elasticsearch/elasticsearch/issues/1170#issuecomment -43381486
.

@dctdct para PHP use new stdClass() en lugar Array() Esto es json_encode "característica"

¡Dulce! gracias @uboness

¿Fue útil esta página
0 / 5 - 0 calificaciones