文章目录
一、数据类型
在 Elasticsearch 中,文档(Document)是最小的数据单元,每个文档都是 JSON 格式的数据。为了有效地索引和搜索这些文档,Elasticsearch 定义了多种数据类型来表示文档中的字段。下面是一些常见的数据类型:
1. 基本数据类型
- text:用于全文本值,如博客文章或电子邮件正文。这些字段可以被分析成多个词项,用于全文搜索。
- keyword:用于结构化数据,如电子邮件地址、主机名或标签。它们不会被分析,通常用于过滤、排序和聚合。
- integer 和 long:分别用于32位和64位整数。
- float 和 double:分别用于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 格式的响应体。这个响应体包含了关于请求结果的详细信息。
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
: 匹配查询的文档总数。在较新的版本中,它可能是一个对象,其中包含value
和relation
两个字段,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"。