字段和field.keyword之间的区别

tom*_*mak 8 elasticsearch kibana

如果我在Elasticsearch索引中添加包含多个字段的文档,则在Kibana中查看该文档时,每次获得相同字段的次数都是两次。其中之一将被称为

some_field
Run Code Online (Sandbox Code Playgroud)

而另一个将被称为

some_field.keyword
Run Code Online (Sandbox Code Playgroud)

这种行为从何而来?两者之间有什么区别?

PS:其中一个是可聚合的(不确定这是什么意思),另一个(无关键字)不是可聚合的。

Pio*_*ski 15

更新:一个简短的答案就是这种类型:分析文本,这意味着在存储时将其分解为不同的词,并允许在字段中对一个或多个词进行自由文本搜索。.keyword字段采用相同的输入并保留为一个大字符串,这意味着可以对其进行汇总,并且可以在其上使用通配符搜索。可聚合意味着您可以在elasticsearch的聚合中使用它,如果您熟悉它,它类似于sql组。在Kibana中,您可能会将.keyword字段与聚合一​​起使用以计算不同的值,等等。


请阅读有关textvs的keyword这篇文章。

简要地说:由于Elasticsearch 5.0 string类型被textkeyword类型所代替。从那时起,对于带有字符串的简单文档,不要指定显式映射:

{
  "some_field": "string value"
}
Run Code Online (Sandbox Code Playgroud)

下面将创建动态映射:

{
  "some_field": {
    "type" "text",
    "fields": {
      "keyword": {
        "type": "keyword",
        "ignore_above": 256
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

因此,既可以对进行全文搜索some_field,也可以使用some_field.keyword字段进行关键字搜索和聚合。

我希望这回答了你的问题。

  • 链接的文章对此进行了解释,但一个简短的答案就是这种类型:对文本进行分析,这意味着它在存储时会分解为不同的单词,并允许在字段中对一个或多个单词进行自由文本搜索。.keyword字段采用相同的输入并保留为一个大字符串,这意味着可以对其进行汇总,并且可以在其上使用通配符搜索。可聚合意味着您可以在elasticsearch的聚合中使用它,如果您熟悉它,它类似于sql组。在Kibana中,您可能会将.keyword字段与聚合一​​起使用以计算不同的值,等等。 (4认同)

bri*_*art 7

看看这个问题。里面有你的问题的一些解释。粗略的some_field分析一下,可以用于全文搜索。另一方面some_field.keyword,不进行分析,可用于术语查询或聚合。