es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo debo escribir la consulta para ElasticSearch en Rails?

Tengo que escribir una consulta en mi SortBuilder.rb en la cual quiero contar la ocurrencia de una palabra (que llega en este método en la variable valor) en los resultados y ordenar los resultados según el conteo de la palabra.

También quiero mostrar el conteo más tarde, así que quiero guardarlos en una variable.

Mi lógica actual es —

sort: [
 query: value,
 aggs:  {
   my_terms: {
     filters: {
       value: { term: { "title" => "#{value}" }}
     }
   }
 }
]
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener el conteo de la aparición de una palabra y ordenar los resultados en función de ello, puedes modificar la consulta en SortBuilder.rb para utilizar la agregación “terms” en lugar de la agregación “filters”.

    Aquí está el código actualizado:

    valor = # el término de búsqueda
    
    sort: [
      {
        _script: {
          type: "number",
          script: {
            lang: "painless",
            source: "doc['body'].toString().contains(params.term) ? 1 : 0",
            params: {
              term: valor
            }
          },
          order: "desc"
        }
      }
    ],
    
    aggs: {
      my_term_count: {
        terms: {
          field: 'body',
          include: "#{valor}",
          size: 0
        }
      }
    }
    

    Este código utiliza el parámetro _script en la consulta de ordenamiento para contar el número de veces que aparece el término de búsqueda en el campo body de cada documento. Luego, ordena los resultados en función de esta cuenta en orden descendente.

    El parámetro aggs utiliza la agregación terms para obtener el conteo de apariciones del término de búsqueda en el campo body. Este conteo se almacena en la variable my_term_count.

    Ten en cuenta que esto asume que estás buscando en el campo body de tus documentos. Es posible que necesites modificar el código para buscar en un campo diferente. Además, este código es para Elasticsearch versión 5; si estás utilizando una versión diferente, es posible que la sintaxis sea diferente.

Comments are closed.