掌握ElasticSearch(四):数据类型、回复体

时间:2024-10-26 18:59:29

文章目录

  • 一、数据类型
    • 1. 基本数据类型
    • 2.复合数据类型
    • 3.特殊数据类型
    • 4.元数据字段
  • 二、API响应结构
    • 1. 基本信息
    • 2. 搜索结果
    • 3. 聚合结果
    • 4. 错误信息

一、数据类型

在 Elasticsearch 中,文档(Document)是最小的数据单元,每个文档都是 JSON 格式的数据。为了有效地索引和搜索这些文档,Elasticsearch 定义了多种数据类型来表示文档中的字段。下面是一些常见的数据类型:

1. 基本数据类型

  • text:用于全文本值,如博客文章或电子邮件正文。这些字段可以被分析成多个词项,用于全文搜索。
  • keyword:用于结构化数据,如电子邮件地址、主机名或标签。它们不会被分析,通常用于过滤、排序和聚合。
  • integerlong:分别用于32位和64位整数。
  • floatdouble:分别用于32位和64位浮点数。
  • boolean:用于布尔值,即 true 或 false。
  • date:用于日期值,支持多种日期格式,包括时间戳。
  • binary:用于二进制数据,以 Base64 编码字符串的形式存储。

2.复合数据类型

  • object:允许在一个字段中嵌套多个字段,创建复杂的对象模型。
  • nested:与 object 类似,但是每个嵌套的对象都被独立地索引,这使得对嵌套对象的精确查询成为可能。
  • array:任何类型的字段都可以是一个数组,只需简单地为同一个字段指定多个值即可。

3.特殊数据类型

  • geo_point:用于地理位置点,支持经纬度坐标,可以用于距离查询和地理空间查询。
  • geo_shape:用于更复杂的地理形状,如多边形或多线。
  • ip:用于 IP 地址,支持 IPv4 和 IPv6。
  • completion:用于自动完成建议功能,常用于实现搜索引擎的“按需输入”功能。
  • range:用于范围值,比如日期范围、数字范围等。

4.元数据字段

  • _id:文档的唯一标识符。
  • _source:包含原始 JSON 文档的字段。
  • _type:文档的类型(注意:从 Elasticsearch 7.0 开始,每个索引只能有一个类型)。
  • _index:文档所属的索引名称。
  • _version:文档的版本号,每次更新文档时都会增加。

二、API响应结构

Elasticsearch 是一个分布式的搜索和分析引擎,适用于需要快速搜索大量数据的应用场景。当向 Elasticsearch 发送请求(例如搜索或索引操作)时,它会返回一个 JSON 格式的响应体。这个响应体包含了关于请求结果的详细信息。

{
  "took": 5,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 10,
      "relation": "eq"
    },
    "max_score": 1.3862944,
    "hits": [
      {
        "_index": "my_index",
        "_type": "_doc",
        "_id": "1",
        "_score": 1.3862944,
        "_source": {
          "title": "Example Document",
          "content": "This is an example document for testing."
        }
      },
      // 更多命中结果...
    ]
  }
}

1. 基本信息

  • took: 表示执行请求所花费的时间,以毫秒为单位。
  • timed_out: 表明请求是否超时。如果值为 true,则表示请求在完成之前已超时。

2. 搜索结果

  • _shards: 包含了关于分片的信息,包括成功、失败的分片数量等。
  • hits: 这是搜索结果的核心部分,包含以下子项:
    • total: 匹配查询的文档总数。在较新的版本中,它可能是一个对象,其中包含 valuerelation 两个字段,value 表示匹配的文档数,relation 表示这个数字是否准确。
    • max_score: 如果使用了评分,则这是所有匹配文档中的最高评分。
    • hits: 一个数组,每个元素代表一个匹配的文档,包含以下信息:
      • _index: 文档所在的索引名。
      • _type: 文档类型(在7.x及更高版本中,此字段已被移除)。
      • _id: 文档的唯一标识符。
      • _score: 文档与查询的相关性得分,得分越高表示相关性越高。
      • _source: 包含了文档的实际内容,除非明确关闭了 _source 字段的存储。
      • highlight: 如果启用了高亮显示功能,这里将包含高亮的片段。

3. 聚合结果

  • aggregations: 当查询中包含聚合操作时,此部分将包含聚合的结果。每个聚合都有自己的名称,并且结果可以非常多样化,具体取决于所使用的聚合类型(如 terms, histogram, stats 等)。

4. 错误信息

  • errors: 如果请求过程中发生了错误,此字段将被设置为 true,并且响应体中会包含具体的错误信息。
  • failures: 在多分片请求中,如果某些分片处理失败,这里的数组将列出这些失败的详情。

在上面这个例子中,我们可以看到请求花费了5毫秒,没有超时,所有的分片都成功处理了请求,总共有10个文档匹配了查询条件,其中最高得分为1.3862944,第一个匹配的文档是ID为1的文档,其标题为“Example Document”。