elasticsearch调试相关
song

Analyze API

  • 用途:调试分词器(Tokenizer)和分词过滤器(Token Filter)的行为。

  • `GET /_analyze``

  • GET /<index>/_analyze

1
2
3
4
5
6
7
8
9
10
11
12
GET /_analyze
{
"analyzer": "standard",
"text": "Hello World!"
}

# 或指定字段的分词规则
GET /{index}/_analyze
{
"field": "content",
"text": "Elasticsearch"
}

Term Vectors API

Elasticsearch 的 Term Vectors API 用于获取特定文档中某个字段的词条(Term)详细信息,包括词频、位置、偏移量等,帮助开发者调试分词器行为、分析索引数据,或验证文档的词条存储是否符合预期。

  1. 查看词条信息
    • 词频(Term Frequency):某个词在文档中的出现次数。
    • 位置(Position):词在字段中的位置(用于短语查询)。
    • 偏移量(Offset):词在原始文本中的字符偏移(用于高亮显示)。
    • 全局统计:词在索引中的总出现次数(term_statistics=true 时生效)。
  2. 调试分词器
    验证自定义分词器(Analyzer)对文本的实际处理结果(如停用词过滤、同义词扩展等)。
  3. 验证索引数据
    检查文档是否以预期的词条形式存储(如大小写转换、词干提取)。
  • GET /<index>/_termvectors/<_id>
  • POST /_mtermvectors
  • POST /<index>/_mtermvectors
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
GET /products/_termvectors/1
{
"fields": ["description"],
"offsets": true,
"positions": true,
"term_statistics": true
}

POST /_mtermvectors
{
"docs": [
{
"_index": "my-index-000001",
"_id": "2",
"term_statistics": true
},
{
"_index": "my-index-000001",
"_id": "1",
"fields": [
"message"
]
}
]
}

Explain API

  • GET /<index>/_explain/<id>
    • 针对 单个文档 解释其是否匹配某个查询,并返回详细的评分计算过程(包括匹配条件、评分公式、字段匹配的 TF/IDF 值等)。
  • POST /<index>/_explain/<id>
    • 针对 单个文档 解释其是否匹配某个查询,并返回详细的评分计算过程(包括匹配条件、评分公式、字段匹配的 TF/IDF 值等)。
  • GET /<index>/_search?explain=true
    • 在搜索请求中为 命中的所有文档 返回评分解释信息。
  • GET /<index>/_search {"explain": true}
    • 在搜索请求中为 命中的所有文档 返回评分解释信息。

Profile API

Elasticsearch 的 Profile API 是用于深度分析查询执行过程的工具,它能提供查询中各个组件的详细耗时和底层执行细节,帮助开发者优化查询性能。

  1. 性能分析
    定位查询的瓶颈,例如哪些查询阶段(如 queryfetchscript)耗时最长。
  2. 执行细节
    显示查询在 Lucene 底层的执行步骤(如 termrangeboolean 查询的具体操作)。
  3. 优化依据
    通过分析耗时步骤,调整查询逻辑、索引设计或参数配置(如分片策略、字段类型)。

返回的数据结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"profile": {
"shards": [
{
"id": "[shard_id]",
"searches": [
{
"query": [...], // 查询阶段的详细耗时
"rewrite_time": ..., // 查询重写耗时
"collectors": [...] // 结果收集器的耗时(如 TopDocs 收集)
}
],
"fetch": {...} // 获取文档原文的耗时(如 _source 字段)
}
]
}
}

启动 Profile
在 _search 请求的 URL 参数或请求体中添加 "profile": true

1
2
3
4
5
6
7
GET /products/_search
{
"profile": true,
"query": {
"match": { "name": "laptop" }
}
}

Validate API

  • 用途:验证查询语法是否合法,并提供错误信息。
  • 语法
    1
    2
    3
    4
    GET /{index}/_validate/query?explain=true
    {
    "query": { ... }
    }
由 Hexo 驱动 & 主题 Keep