IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Elasticsearch——Keyword字段类型 -> 正文阅读

[大数据]Elasticsearch——Keyword字段类型

keyword family包括以下字段类型:

  • keyword,用于结构化内容,如ID、电子邮件地址、主机名、状态码、邮政编码或标记。
  • constant_keyword??始终包含相同值的keyword字段。
  • wildcard??非结构化machine-generated内容,wildcard类型针对具有大值或高基数的字段进行了优化。

keyword字段通常用于排序(sorting)、聚合(aggregations)和term-level查询,例如term。

避免使用keyword字段进行全文搜索(full-text)。改为使用文本(text)字段类型。

Keyword field type

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

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

映射数字标识符

并非所有数值数据都应映射为numeric字段数据类型。Elasticsearch为了range查询会优化数值字段,如integer或long。但是,keyword字段更适合term和其他term-level查询。

range查询中很少使用诸如ISBN或产品ID之类的标识符。但是,它们通常使用term-level查询进行检索。

如果将数字标识符映射为keyword,请考虑:

  • 不打算使用范围(range)查询搜索标识符数据。
  • 快速检索很重要。keyword字段上的term查询搜索通常比数字字段上的term搜索快。

如果不确定要使用哪个字段,可以使用多字段将数据映射为keyword和数字(numeric)数据类型。

常量关键字(Constant 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"
}

但是,不允许提供与映射中配置的值不同的值。

如果映射中没有提供值,则该字段将根据第一个索引文档中包含的值自动配置自身。虽然这种行为很方便,但请注意,这意味着如果一个不好的文档的值错误,那么它可能会导致所有其他文档被拒绝。

在提供值之前(通过映射或来自文档),字段上的查询将不匹配任何文档。这包括exists查询。

设置字段后,无法更改该字段的值。

通配符(Wildcard)字段类型

wildcard字段类型是一个专门的keyword字段,用于非结构化机器生成的内容,你计划使用grep-like的wildcard和regexp查询进行搜索。wildcard类型针对具有大值或高基数的字段进行了优化。

映射非结构化内容

可以将包含非结构化内容的字段映射到text或keyword family字段。最佳字段类型取决于内容的性质以及你计划如何搜索字段。

在以下情况下使用text字段类型:

  • 内容是人类可读的,例如电子邮件正文或产品描述。
  • 计划在字段中搜索单个单词或短语,例如the brown fox jumped,使用全文查询(full text queries)。Elasticsearch? analyzes text字段,为这些查询返回最相关的结果。

在以下情况下使用keyword family 字段:

  • 内容由机器生成,例如日志消息或HTTP请求信息。
  • 计划使用term-level queries查询在字段中搜索精确的完整值(如org.foo.bar)或部分字符序列(如org.foo.*)。

在内部,wildcard字段使用ngrams索引整个字段值,并存储完整字符串。索引用作粗过滤器,通过检索和检查完整值来减少随后检查的值的数量。此字段特别适合在日志行上运行类似grep的查询。存储成本通常低于keyword字段的存储成本,但在完整术语上精确匹配的搜索速度较慢。如果字段值共享许多前缀,例如同一网站的URL,则wildcard字段的存储成本可能高于等效keyword字段。

我们可以按如下方式索引和搜索wildcard字段:

PUT my-index-000001
{
  "mappings": {
    "properties": {
      "my_wildcard": {
        "type": "wildcard"
      }
    }
  }
}


PUT my-index-000001/_doc/1
{
  "my_wildcard" : "This string can be quite lengthy"
}


GET my-index-000001/_search
{
  "query": {
    "wildcard": {
      "my_wildcard": {
        "value": "*quite*lengthy"
      }
    }
  }
}

局限性

wildcard字段与keyword字段一样是未排序的,因此不支持依赖于单词位置的查询,例如短语(phrase)查询。

运行wildcard查询时,将忽略任何重写参数。得分总是一个恒定的分数。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-26 12:10:28  更:2021-08-26 12:10:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:59:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码