Создать эластичный поиск и запрос на основе размера списка, т.е. нет. И в запросе будет основан на нет. предметов в списке
У меня есть список, размер которого не является фиксированным и может содержать любые нет. предметов.
Основываясь на количестве элементов в списке, мне нужно сгенерировать эластичный поиск И запрос, чтобы найти точное совпадение значений.
Например:
Если мой список содержит 2 элемента: ['a', 'b']
мой эластичный поисковый запрос должен выглядеть так:
Q('term', field='a') & Q('term', field='b')
Похоже, если мой список содержит 4 элемента: ['a', 'b','c','d']
мой запрос будет выглядеть так:
Q('term', field='a') & Q('term', field='b') & Q('term', field='c') & Q('term', field='d')
Какой правильный подход для генерации такого типа запроса на основе размера списка?
PS: я использую elasticsearch_dsl
модуля Q
библиотека для генерации эластичных поисковых запросов.
https://elasticsearch-dsl.readthedocs.io/en/latest/search_dsl.html
2 ответа
Проще всего проверить, какой запрос &
операция производит и воспроизводит это напрямую. В этом случае: Q('bool', must=[Q('term', field=x) for x in my_list])
Мое решение выполнить &
операция должна была произвести match
запрос для каждого элемента в списке.
must = []
for item in my_list:
must.append({'match': {'field_name': item}})
query = Q('bool', must=must)