Заглавные буквы в поле, вызывающие сбой запроса в elasticsearch

#python #elasticsearch #elasticsearch-py

#python #elasticsearch #elasticsearch-py

Вопрос:

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

Должен ли я кодировать свой идентификатор клиента в формате, который использует только строчные буквы? Или есть способ сделать термин filter (или какой-либо аналогичный фильтр) чувствительным к регистру? Или мне нужно включить какой-либо параметр в tenant_id поле, чтобы сохранить его регистр?

 {
    'query': {
        'bool': {
            'must': [{'match': {'transcript': 'hello, world!'}}],
            'filter': [
                {'term': {'tenant_id': 'XRqtv5O91WEEt'}}
            ]
        }
    }
}
  

Ответ №1:

Попробуйте match вместо term :

 {
    'query': {
        'bool': {
            'must': [{'match': {'transcript': 'hello, world!'}}],
            'filter': [
                {'match': {'tenant_id': 'XRqtv5O91WEEt'}}
                  ^^^^^
            ]
        }
    }
}
  

В качестве альтернативы, вы можете сохранить term , но keyword вместо этого использовать подполе (если такое поле существует в вашем сопоставлении)

 {
    'query': {
        'bool': {
            'must': [{'match': {'transcript': 'hello, world!'}}],
            'filter': [
                {'term': {'tenant_id.keyword': 'XRqtv5O91WEEt'}}
                                    ^^^^^^^^
            ]
        }
    }
}