Я использую Elasticsearch версии 6.3.1 для проекта django. Я использую регулярные выражения, поддерживаемые фильтром query_string, но два моих поля в одном и том же индексе имеют одинаковое отображение, хотя при поиске с пробелами один ключ возвращает значения, а другой - нет.
Поскольку в обоих моих полях хранятся строкив них, поэтому я пробовал как с ключевым словом, так и с полнотекстовым поиском с помощью query_string.
Mappings -
Поле 1 -
{u'field1': {u'full_name': u'field1',
u'mapping': {u'field1': {u'fields': {u'keyword': {u'ignore_above': 256,
u'type': u'keyword'}},
u'type': u'text'}}},
Поле2 -
{u'field2': {u'full_name': u'field2',
u'mapping': {u'field2': {u'fields': {u'keyword': {u'ignore_above': 256,
u'type': u'keyword'}},
u'type': u'text'}}}}}}}
Значение, сохраненное в обоих полях -
Поле 1 - «test abc»
Поле 2 - «test test abc testabc "
Запрос
Для поля2 -
{'_source': 'field1',
'from': 0,
'query': {'bool': {
'must': [
{'term': {'field3.keyword':'Test1'}},
{'term': {'field4': 1741}},
{'query_string': {
'fields': ['field2.keyword'],
'query': '/.*test abc.*/',
}
}
],
}}]}},
'size': 50}
Для поля1 -
{'_source': 'field1',
'from': 0,
'query': {'bool': {
'must': [
{'term': {'field3.keyword':'Test1'}},
{'term': {'field4': 1741}},
{'query_string': {
'fields': ['field1.keyword'],
'query': '/.*test abc.*/',
}
}
],
}}]}},
'size': 50}
Выход для поля1 -
{u'hits': [{u'_id': u'1',
u'_index': u'test',
u'_score': 8.594198,
u'_source': {u'alias': u'test abc'},
u'_type': u'test'}],
u'max_score': 8.594198,
u'total': 1}
Вывод для field2 -
{u'hits': [], u'max_score': None, u'total': 0}
Что может быть причиной такого поведения?