Фильтр строк на основе пары условий в Elasticsearch в Django

Я работаю над приложением QA (опрос). Я внедрил Elastic Search в приложение. Я хочу фильтровать пользователей на основе их ответов. Предположим, есть вопросы:

  1. Есть ли у вас паспорт? Да/Нет
  2. Есть ли у вас водительские права? Да/Нет

Теперь я хочу получить тех пользователей, которые ответили Yes на оба вопроса.

Мой документ с ответами выглядит следующим образом.

@registry.register_document
class AnswerDocument(Document):

    user = fields.ObjectField(properties={
        'id': fields.IntegerField(),
        'name': fields.TextField(),
    })
    question = fields.ObjectField(properties={
        'id': fields.IntegerField(),
        'name': fields.TextField(),
        'description': fields.TextField(),
    })

    class Index:
        name = 'answers'
        settings = {
            'number_of_shards': 1,
            'number_of_replicas': 0,
        }

    class Django:
        model = Answer
        fields = [
            'id',
            'yes_no_ans',
        ]

Я создал выражение запроса, но оно не работает так, как ожидалось.

expression = (Q('bool', should=[
                         Q('match', question__name='passport'),
                         Q('match', yes_no_ans='yes'),
                     ], minimum_should_match=2)
                )
                & 
                (Q('bool',
                      should=[
                             Q('match', question__name='driving license'),
                             Q('match', yes_no_ans='yes'),
                     ],
                     minimum_should_match=2))

response = AnswerDocument.search().query(expression).execute()

Может ли кто-нибудь помочь мне с этим? Спасибо.

Вернуться на верх