Неожиданное поведение из-за эластичного поиска «query_string» для разных полей с одинаковым отображением - PullRequest
1 голос
/ 22 октября 2019

Я использую 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}

Что может быть причиной такого поведения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...