Как выполнить поиск по нескольким полям в django_opensearch_dsl
У меня есть сервер opensearch, на котором я хочу выполнять поиск элементов и применять некоторые фильтры к поиску:
search = Item.search().query("match", name="test")
Мне нужно искать элементы по нескольким фильтрам, таким как название, дата, местоположение и т.д. Для этого мне понадобятся запросы другого типа, такие как "диапазон" или "термины".
Теперь проблема в том, что я пытаюсь использовать opensearch-dsl пакет, подобный этому:
search_1 = ESQ("match", name="test")
search_2 = ESQ("terms", name="location")
search_3 = ESQ("range", name="date")
filters = [search_1, search_2, search_3]
query = ESQ("bool", should=filters)
search = FreezerItemDocument.search().query(query)
Это не работает, постоянно возвращаются ошибки типа:
{"error":"unhashable type: 'Bool'"}
Событие, если я попытаюсь выполнить запрос по отдельности следующим образом:
query = ESQ("match", name="test")
search = FreezerItemDocument.search().query(query)
Как я могу выполнить поиск по нескольким полям?
Я тоже получал ошибку unhashable - другие пользователи не смогли ее воспроизвести. Однако я обнаружил, что изменение
search = FreezerItemDocument.search().query(query)
от до
search = FreezerItemDocument.search().query(query.to_dict())
проблема решена.
Опять же, те, с кем я разговаривал, сочли это запутанным, поскольку django-opensearch-dsl должен автоматически выполнять to_dict(), но у меня это не получилось, поэтому я бы предположил, что у вас то же самое.