【问题标题】:What is the difference between 'field' and 'field.keyword'?“field”和“field.keyword”有什么区别?
【发布时间】:2018-06-25 22:03:45
【问题描述】:

我在elasticsearch 6.X.X 中导入了一个索引,并创建了两个类型,名称为field 和field.keyword。

field.keyword 是可聚合的,而 field 不是。

两者都是字符串类型。

它们有什么区别?

【问题讨论】:

    标签: elasticsearch elasticsearch-6


    【解决方案1】:

    field.keyword 是文本字段值的未分析值,而 field 包含分析值后的所有标记。

    因此您可以使用 field.keyword 进行聚合,使用字段进行搜索

    您可以查看文档here

    【讨论】:

    • 是的,我知道,但是在 kibana 中,这两个字段都说它们是字符串类型,而不是文本或关键字。
    【解决方案2】:

    字符串类型前段时间已弃用,Elasticsearch 6.x 无法向后兼容处理它们。

    如何迁移: 在大多数情况下,迁移应该非常简单。过去被映射为分析字符串的字段

    {
      "foo": {
        "type" "string",
        "index": "analyzed"
      }
    }
    

    现在需要映射为文本字段:

    {
      "foo": {
        "type" "text",
        "index": true
      }
    }
    

    以及过去被映射为 not_analyzed 字符串的字段

    {
      "foo": {
        "type" "string",
        "index": "not_analyzed"
      }
    }
    

    现在需要映射为关键字字段:

    {
      "foo": {
        "type" "keyword",
        "index": true
      }
    }
    

    完整的解释请看这里: https://www.elastic.co/blog/strings-are-dead-long-live-strings

    【讨论】:

    • 是的,我知道,但是在 kibana 中,这两个字段都说它们是字符串类型,而不是文本或关键字。
    • 是的,您需要在索引映射中将它们从字符串更改为文本/关键字,正如我所描述的那样。
    猜你喜欢
    • 1970-01-01
    • 2023-01-05
    • 2011-07-10
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 2013-04-21
    相关资源
    最近更新 更多