Правильный тип Elasticsearch для электронной почты - PullRequest
0 голосов
/ 03 февраля 2020

В моих документах есть поле с именем email, тип которого text. Это поле, очевидно, содержит адрес электронной почты. Я выполняю этот запрос агрегации в этом поле, чтобы получить уникальный список всех электронных писем во всех моих документах:

GET foo-bar-index/_search
{
    "size": 0,
    "aggs" : {
        "email" : {
            "terms" : { "field" : "email" }
        }
    }
}

Все электронные письма имеют один и тот же домен, скажем: @foobar.com. У меня есть несколько пользователей:

  • Фред. smith@foobar.com
  • Боб. brown@foobar.com
  • Джон. doe@foobar.com

Но мои результаты выглядят так:

...
      "buckets" : [
        {
          "key" : "foobar.com",
          "doc_count" : 12
        },
        {
          "key" : "fred.smith",
          "doc_count" : 6
        },
        {
          "key" : "bob.brown",
          "doc_count" : 4
        },
        {
          "key" : "john.doe",
          "doc_count" : 2
        }
...

Таким образом, он выбирает субдомен как имя и удаляет его из моих результатов. У меня есть сопоставление с этим индексом foo-bar-mapping, из которого я включил полевые данные по электронной почте следующим образом, как я видел, я должен делать в Интернете:

PUT foo-bar-index/_mapping/foo-bar-mapping?include_type_name=true
{
   "foo-bar-mapping": {
      "properties": {
        "email": {
          "type": "text",
          "fielddata": true
        }
      }
   }
}

Я думаю, что я должен иметь email быть типом keyword вместо text, но я не знаю достаточно об упругом поиске.

1 Ответ

0 голосов
/ 04 февраля 2020

Спасибо @ibexit, просто для тех, кто хочет получить ответ, что изменить. Мне не нужно было менять свой индекс, хотя может быть лучше изменить его по соображениям производительности, но теперь я изменил поле в запросе на быть email.keyword:

GET foo-bar-index/_search
{
    "size": 0,
    "aggs" : {
        "email" : {
            "terms" : { "field" : "email.keyword" }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...