Почемуasticsearch возвращает слишком разные результаты для одного и того же запроса по разным показателям? - PullRequest
0 голосов
/ 19 февраля 2019

Сначала я использую Elasticsearch & Kibana, поэтому, пожалуйста, сохраняйте спокойствие с моим вопросом!

Мне дали ES, у которого уже был индекс под названием dai-*, с некоторыми предварительно загруженными данными.Чтобы безопасно поиграться с ES, я создал новый индекс под названием ad-prior.Затем я продолжил снабжать оба индекса данными, похожими на:

{'obj_id': 'UHDRXEWEEK', 'event_type': 'PREC_AD_STARTED', 'event_id': '5c6b584373d', 'timestamp': 1550540223736L, 'channel_id': '123456789'}
{'obj_id': 'FDREJJSSHE', 'event_type': 'PREC_AD_STARTED', 'event_id': '4f53jhabd24', 'timestamp': 1550540225872L, 'channel_id': '123456789'}

Затем я попытался выполнить поиск в Discover Kibana:

event_type.keyword:PREC_AD_STARTED
event_type:PREC_AD_STARTED
event_type:'PREC_AD_STARTED'

Индекс dai-*: все вышеуказанные поиски вернулись 367 hits.

Индекс ad-prior: вышеупомянутые поиски дали разные результаты: event_type:PREC_AD_STARTED вернул 8 hits, но два других вернули 0 hits.

Почему вышеуказанные поиски вернулитот же результат для dai-*, в то время как возвращаются разные результаты для ad-prior?

Обновление

Чтобы ответить на комментарий @Nishant Saini, я схватил what-I-предположим-toдля отображения event_type здесь:

для dai-*:

"event_type": {
  "type": "text",
  "fields": {
    "keyword": {
      "type": "keyword",
      "ignore_above": 256
    }
  }
}

для ad-prior:

"event_type": {
  "type": "keyword",
  "ignore_above": 1024
}

1 Ответ

0 голосов
/ 19 февраля 2019

Случай 1: event_type.keyword:PREC_AD_STARTED

В индексе dia-* свойство event_type имеет подполе с именем keyword.Приведенный выше запрос относится к этому подполю, т.е. event_type.keyword.Для совпадения в dai-* документы возвращаются, тогда как это подполе отсутствует для поля event_type в индексе ad-prior и, следовательно, нет результатов.

Случай 2: event_type:PREC_AD_STARTED

event_type присутствует в обоих индексах.Несмотря на то, что в индексе dai-* тип данных text, и поскольку по умолчанию применяется стандартный анализатор, значение PREC_AD_STARTED приведет к prec_ad_started.Приведенный выше запрос применяет тот же анализатор к входной строке, которая также затем преобразуется в prec_ad_started и, следовательно, соответствует документам.

В случае индекса ad-prior тип данных event_type равен keyword и, следовательно, является входнымСтрока индексируется как есть.Даже при поиске происходит то же самое, и, следовательно, приведенный выше запрос также совпадает и в этом случае.

Поэтому этот запрос дает результат в случае обоих индексов.

Случай 3: event_type:'PREC_AD_STARTED'

Для индекса dai-*, поскольку запрос находится в поле event_type (не для event_type.keyword), который имеет тип text (по умолчанию анализатор: стандартный), когда PREC_AD_STARTED проиндексирован, значение, которое индексируется, равно prec_ad_started благодаря стандартному анализатору .Приведенный выше запрос ищет 'PREC_AD_STARTED' (с одинарными кавычками).Даже эта строка будет передана через стандартный анализатор, который также преобразуется в prec_ad_started, и, следовательно, этот запрос совпадает.

В случае индекса ad-prior, event_type имеет тип keyword, что означает индекс какбез каких-либо изменений.Поскольку мы запрашиваем поле event_type, запрос не будет применять анализатор (поскольку тип данных ключевое слово ) и, следовательно, будет искать 'PREC_AD_STARTED' (не PREC_AD_STARTED) и, следовательно, совпадений не будет.

...