Создать эластичный поиск и запрос на основе размера списка, т.е. нет. И в запросе будет основан на нет. предметов в списке

У меня есть список, размер которого не является фиксированным и может содержать любые нет. предметов.

Основываясь на количестве элементов в списке, мне нужно сгенерировать эластичный поиск И запрос, чтобы найти точное совпадение значений.

Например:

Если мой список содержит 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)
Другие вопросы по тегам