ElasticSearch之Keyword类型族

60 阅读2分钟

keyword族包含以下字段类型:

  • keyword,用于结构化内容,例如IDs、电子邮件地址、主机名、状态代码、邮政编码或者标签。
  • constant_keyword,对于始终包含相同值的keyword字段。
  • wildcard,用于非结构化机器生成的内容。wildcard类型对具有大值或高基数的字段进行了优化。

Keyword字段常用于sortingaggregationsterm-level queries,例如term

Keyword 字段类型

下面是基本keyword字段的映射示例:

PUT my-index-000001
{
  "mappings": {
    "properties": {
      "tags": {
        "type":  "keyword"
      }
    }
  }
}

基本keyword字段的参数

keyword字段接受以下参数:

  • boost:映射字段级查询时提升(提升权重)。接受浮点数,默认为1.0。

注意:boost仅适用于term queries(前缀、范围和模糊查询不提升)

插入时设置:

PUT my-index-000001
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "boost": 2 
      },
      "content": {
        "type": "text"
      }
    }
  }
}

查询时可以不用:

POST _search
{
  "query": {
    "match": {
      "title": {
        "query": "quick brown fox"
      }
    }
  }
}

相同于:

POST _search
{
  "query": {
    "match": {
      "title": {
        "query": "quick brown fox",
        "boost": 2
      }
    }
  }
}
  • doc_values:该字段是否应该以列跨度的方式存储在磁盘上,以便以后可以用于排序、聚合或编写脚本?接受true(默认)或false。
  • eager_global_ordinals:是否应该在刷新时急切地加载全局序号?接受true或false(默认)。在经常使用terms聚合的字段上启用此功能是个好主意。

有点像mysql的自增主键

<...剩余部分暂不翻译...>

常量 keyword字段类型

常量keyword是keyword字段的一个特殊,在索引中所有文档具有相同的值。

PUT logs-debug
{
  "mappings": {
    "properties": {
      "@timestamp": {
        "type": "date"
      },
      "message": {
        "type": "text"
      },
      "level": {
        "type": "constant_keyword",
        "value": "debug"
      }
    }
  }
}

constant_keyword支持与keyword字段相同的查询和聚合,但利用所有文档具有相同的每个索引值这一事实,可以更有效地执行查询。

允许提交没有字段值或值等于映射中配置的值的文档。以下两个索引请求是等效的:

POST logs-debug/_doc
{
  "date": "2019-12-12",
  "message": "Starting up Elasticsearch",
  "level": "debug"
}

POST logs-debug/_doc
{
  "date": "2019-12-12",
  "message": "Starting up Elasticsearch"
}

<...剩余部分暂不翻译...>

Wildcard字段类型

wildcard字段类型是一个专门的keyword字段,用于机器生成的非结构化内容,你计划使用grep-like wildcard(通配符)和regexp查询。wildcard类型是被优化针对于大值或者高基数字段。

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 3 天,点击查看活动详情