#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'}}
^^^^^^^^
]
}
}
}