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?
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:
Aquí, después de actualizar la variable
default_operator
, actualizamos la consulta de búsqueda usandosearch.update_from_dict()
y pasamos el nuevo valor dedefault_operator
en la consultasimple_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 claseSearch
deelasticsearch-dsl-py
.