如果我将一个包含多个字段的文档添加到Elasticsearch索引,当我在Kibana中查看它时,每次都会得到两次相同的字段。其中一个将被称为
some_field
而另一个将被称为
some_field.keyword
这种行为来自哪里,两者之间有什么区别?
PS:其中一个是可聚合的(不确定是什么意思)而另一个(没有关键字)则不是。
答案 0 :(得分:5)
更新: 简短的答案就是那种类型:文本被分析,这意味着它在存储时被分解成不同的单词,并允许自由文本搜索该领域的一个或多个单词。 .keyword字段采用相同的输入并保持为一个大字符串,这意味着它可以聚合在一起,并且您可以对其使用通配符搜索。 Aggregatable意味着您可以在elasticsearch中的聚合中使用它,如果您熟悉它,则类似于sql组。在Kibana中,您可能会使用带有聚合的.keyword字段来计算不同的值等。
请查看有关text
vs. keyword
的文章。
简要说明:由于Elasticsearch 5.0 string
类型已被text
和keyword
类型替换。从那时起,当您没有指定显式映射时,对于带有字符串的简单文档:
{
"some_field": "string value"
}
将创建以下动态映射:
{
"some_field": {
"type" "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
因此,可以使用
some_field
字段对some_field.keyword
执行全文搜索,以及执行关键字搜索和聚合。
我希望这能回答你的问题。
答案 1 :(得分:1)
查看this问题。你的问题有一些解释。粗略地说some_field
被分析并可用于全文搜索。另一方面,some_filed.keyword
未被分析,可用于术语查询或聚合。