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.

Solicitud de Axios a Opensearch/Elasticsearch

Actualmente puedo hacer solicitudes GET y POST a mi colección, pero necesito la capacidad de realizar consultas más complicadas. Estoy utilizando bodybuilder para estructurar la solicitud y axios como mi cliente.

Sin embargo, al usar POST no obtengo los resultados especificados, en su lugar obtengo los primeros 10 elementos de mi índice, y al usar GET no puedo enviar un cuerpo para estas solicitudes complicadas, por lo que me quedo con POST.

He cambiado la configuración de mis datos de data:data a body:data con el mismo resultado.

Actualmente, este es mi POST, que devuelve datos pero NO mis datos filtrados, solo los primeros 10 elementos de mi colección.

¡Cualquier información sería apreciada!

export function searchQuery(search: string) {
  var body = bodybuilder().query("query_string", "query", search).build();

  const data = JSON.stringify(body);

  axios({
    url: `${SEARCH_URL}`,
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: data,
  }).then((res) => {
    console.log(res);
  });
}

Estos son los registros actuales de mis datos:

{"query":{"query_string":{"query":"Verde"}}}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás encontrando problemas con tu implementación actual de una consulta de búsqueda más complicada utilizando axios y bodybuilder.js. Aunque las solicitudes POST se utilizan generalmente para consultas más complejas, no estás obteniendo los resultados deseados debido a que la implementación actual solo devuelve los primeros 10 elementos de tu índice.

    Una posible solución es utilizar la biblioteca elasticsearch con opensearch (ya que opensearch se basa en elasticsearch). Esto te permitirá utilizar la potencia completa del lenguaje de consulta de elasticsearch y enviar consultas complejas como solicitudes GET con una cadena de consulta en la URL de la solicitud.

    Aquí tienes un ejemplo de implementación para enviar una solicitud de búsqueda con elasticsearch y axios utilizando GET:

    import { Client } from '@elastic/elasticsearch';
    
    const client = new Client({
      node: SEARCH_URL,
    });
    
    export function searchQuery(search: string) {
      client
        .search({
          index: 'el_nombre_de_tu_indice',
          body: {
            query: {
              query_string: {
                query: search,
              },
            },
          },
        })
        .then((res) => {
          console.log(res.body.hits.hits);
        })
        .catch((err) => {
          console.error(err);
        });
    }
    

    Con esta implementación, puedes enviar una consulta más compleja modificando el objeto body para usar la sintaxis completa del lenguaje de consulta de elasticsearch. Cuando se realiza una solicitud de búsqueda, la respuesta incluirá los resultados que coincidan con la consulta. En este ejemplo, simplemente estamos registrando los resultados en la consola. Puedes modificar esta implementación según tus necesidades.

    ¡Espero que esto ayude con tu implementación de una consulta de búsqueda más complicada!

Comments are closed.