В моих документах есть поле с именем 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
, но я не знаю достаточно об упругом поиске.