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.

Actualización del parámetro de consulta de Elasticsearch en Python

Estoy consultando elasticsearch en python. Quiero cambiar un parámetro ‘operador por defecto’ en caso de que la consulta devuelva cero resultados.
Aquí está mi código:

default_operator = "and"
if searchfields is not None:
    if query is not None and query != '':
        queries.append(Q("simple_query_string", query=query, default_operator=default_operator,
                        flags="PREFIX|PHRASE|NOT|AND|OR|FUZZY|WHITESPACE", fields=searchfields))

Hay un código largo después de esto en el que se están realizando diferentes filtros y se agregan a la consulta. Pero aquí está el código donde estoy intentando cambiar el operador por defecto:

res = s.execute()
if res["hits"]["total"]["value"] == 0:
    default_operator = "or"
    print("Consulta con operador por defecto OR:", str(queries))
    res = s.execute()
else:
    pass

Pero no está cambiando el operador por defecto. ¿Cómo puedo hacer esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    En el código proporcionado, estás cambiando el valor de la variable default_operator, pero no lo estás pasando a la consulta de búsqueda cuando la ejecutas por segunda vez.

    Para cambiar el operador predeterminado y pasarlo a la consulta de búsqueda para la segunda ejecución, puedes modificar tu código de la siguiente manera:

    res = s.execute()
    if res["hits"]["total"]["value"] == 0:
        default_operator = "or"
        print("Consulta con operador predeterminado OR: ", str(queries))
        s = s.update_from_dict({"query": {"simple_query_string": {"query": query, "default_operator": default_operator, "flags": "PREFIX|PHRASE|NOT|AND|OR|FUZZY|WHITESPACE", "fields": searchfields}}})
        res = s.execute()
    else:
       pass
    

    Aquí, después de actualizar la variable default_operator, actualizamos la consulta de búsqueda usando search.update_from_dict() y pasamos el nuevo valor de default_operator en la consulta simple_query_string. Esto actualizará la consulta con el nuevo operador y ejecutará la búsqueda nuevamente.

    Ten en cuenta que esto asume que search es una instancia de la clase Search de elasticsearch-dsl-py.

Comments are closed.