Значение разрыва поля на гипе
У меня есть следующие образцы документов в Elasticsearch
[
{
"_index": "beatbox-2018.11.19",
"_source": {
"connection": "10",
"user": "op-dashboard",
"key": "monolith_connection_sniffer"
}
},
{
"_index": "beatbox-2018.11.19",
"_source": {
"connection": "10",
"user": "op-dashboard",
"key": "monolith_connection_sniffer"
}
}
]
Когда я запрашиваю пользователя, я получил ожидаемый результат.
curl -X GET \
'http://127.0.0.1:9200/beatbox-2018.11.19/_search?q=user:op-dashboard'
В Графане:
Я пытался добавить запрос с переменной для пользовательского поля.
{ "find": "terms", "field": "user" }
Но я получил токенизированные значения пользовательского поля.
`op`, `dashboard`
В фоновом режиме следующая полезная нагрузка отправляется на запрос
{
"size": 0,
"query": {
"bool": {
"filter": [
{
"query_string": {
"analyze_wildcard": true,
"query": "*"
}
}
]
}
},
"aggs": {
"1": {
"terms": {
"field": "user",
"size": 500,
"order": {
"_term": "asc"
}
}
}
}
}
Запрос возвращает токенизированный результат. Как я могу это остановить?
Я уже пробовал с помощью следующего шаблона
{
"index_patterns": [
"beatbox*"
],
"mappings": {
"doc":
"properties": {
"user": {
"type": "text",
"fielddata": true,
"analyzer":"whitespace",
"search_analyzer": "whitespace"
}
}
}
}
}
А также с анализатором
{
"index": {
"analysis": {
"default": {
"analyzer": {
"analyzer_keyword": {
"tokenizer": "whitespace"
}
}
}
}
}
}
Отображение для индекса:
{
"beatbox-2018.11.19":{
"mappings":{
"doc":{
"_all":{
"enabled":false
},
"numeric_detection":true,
"properties":{
"connection":{
"type":"long"
},
"key":{
"type":"text",
"norms":false,
"index_options":"freqs"
},
"user":{
"type":"text",
"fielddata":true
}
}
}
}
}
}
Любая помощь?
1 ответ
Решение
Вы должны вы Keyword
Тип данных эластичного поиска вместо text
тип данных в user
поля, как вы его агрегируете.