巧记 Elasticsearch 查询API

记忆Elasticsearch查询API可以通过以下几种方法:

1. **理解核心概念**:Elasticsearch的查询基于JSON结构,主要分为查询上下文和过滤上下文。查询上下文关注文档匹配程度(相关性评分),过滤上下文关注是否匹配(二值,无评分)。

2. **分类记忆**: - 叶子查询子句:如`match`, `term`, `range`等,直接在特定字段上查找值。 - 复合查询子句:如`bool`, `dis_max`等,可以组合多个叶子查询或复合查询。

3. **常用查询类型**: - 匹配查询:`match`(全文搜索)、`match_phrase`(短语匹配) - 精确查询:`term`(精确值)、`terms`(多值)、`range`(范围) - 复合查询:`bool`(必须、应该、必须不)、`constant_score`(固定分数)

4. **实践练习**:多写多练,通过实际例子加深记忆。

5. **使用Elasticsearch官方文档**:文档中有详细的示例和说明。

6. **联想记忆**:将查询语句与SQL语句进行类比,例如: - `term` 类似于 SQL 中的 `=` - `terms` 类似于 SQL 中的 `IN` - `range` 类似于 SQL 中的 `BETWEEN` 或 `>`, `<` - `bool` 类似于 SQL 中的 `AND`、`OR`、`NOT`

7. **工具辅助**:使用Kibana的Dev Tools进行练习,可以即时看到结果。

8. **总结常用模式**:例如,最常用的`bool`查询,里面包含`must`(AND)、`should`(OR)、`must_not`(NOT)。

下面是一个简单的例子,展示如何组合使用这些查询:假设我们要查询年龄在25到35之间,并且名字是"John"或者是"Smith"姓氏的人,同时排除城市是"New York"的记录。在Elasticsearch中,这样的查询可能会这样写:


  "query": { 
    "bool": { 
      "must": [ 
        { "range": { "age": { "gte": 25, "lte": 35 } } }, 
        { 
          "bool": { 
            "should": [ 
              { "match": { "first_name": "John" } }, 
              { "match": { "last_name": "Smith" } } 
            ]
          }
        } 
      ],
      "must_not": [ { "term": { "city": "New York" } } ]
    } 
  }
}

通过将复杂的查询分解为多个部分,并理解每个部分的作用,可以更容易地记忆和构建查询。最后,记住Elasticsearch的查询API虽然丰富,但常用的也就那么几种,多实践就能掌握。

如何巧记 Elasticsearch 查询 API

掌握 Elasticsearch 查询 API 的关键在于理解其结构和设计哲学。以下是一些记忆技巧和方法:

1. 理解核心概念框架

查询类型分类记忆

text

搜索查询 (Search Queries)
├── 全文查询 (Full-text) - 用于文本分析
├── 词项查询 (Term-level) - 用于精确匹配
├── 复合查询 (Compound) - 组合多个查询
└── 特殊查询 (Specialized) - 如脚本、距离查询

聚合类型分类记忆

text

聚合 (Aggregations)
├── 指标聚合 (Metric) - 计算指标如sum、avg
├── 桶聚合 (Bucket) - 分组文档
├── 管道聚合 (Pipeline) - 对其他聚合结果操作
└── 矩阵聚合 (Matrix) - 多个字段操作

2. 联想记忆法

将查询类型与日常概念关联

  • Match Query → 像普通搜索引擎一样"匹配"查询

  • Term Query → 像数据库的"精确"查询

  • Bool Query → 像编程中的"布尔逻辑"(must=AND, should=OR, must_not=NOT)

  • Range Query → 像SQL中的"BETWEEN"或">/<"

使用首字母缩写

例如,记住常用复合查询:

  • Bool (必须掌握)

  • Boosting (控制相关性)

  • Constant Score (固定分数)

  • Dis Max (最佳匹配)

3. 结构化记忆法

查询DSL的通用结构

json

{
  "query": {
    "查询类型": {
      "字段": "值",
      "参数": "值"
    }
  },
  "aggs": {
    "聚合名称": {
      "聚合类型": {
        "字段": "值"
      }
    }
  }
}

常用参数模式记忆

  • boost - 调整相关性权重

  • fuzziness - 模糊匹配程度

  • minimum_should_match - 最小匹配条件

  • size - 返回结果数量

  • from - 分页起始位置

4. 对比记忆法

对比相似查询

查询类型用途特点
match vs term全文 vs 精确分析 vs 不分析
filter vs query过滤 vs 查询不评分 vs 评分
must vs should必须满足 vs 应该满足AND vs OR

对比相似聚合

聚合类型用途示例
terms vs significant_terms常规分组 vs 显著项常见值 vs 异常值
avg vs weighted_avg简单平均 vs 加权平均平等权重 vs 自定义权重

5. 实用口诀记忆

查询构建口诀

text

先定类型后字段,参数调整不可少
布尔查询组合妙,过滤查询性能高
全文搜索用match,精确匹配用term
范围查询用range,多值查询用terms

聚合构建口诀

text

指标聚合算数值,桶聚合来分组看
管道聚合串起来,矩阵聚合多字段
terms分组最常见,date_histogram按时间
嵌套聚合层次清,结果分析更直观

6. 场景化记忆法

常见场景与API对应

  • 搜索商品 → match + range(价格范围) + term(分类)

  • 用户行为分析 → date_histogram(时间分布) + terms(行为类型)

  • 相关推荐 → more_like_this(相似内容) + function_score(加权)

  • 地理位置搜索 → geo_distance(附近) + geo_bounding_box(区域内)

7. 可视化记忆工具

制作查询选择流程图

text

开始查询
│
├─ 需要精确匹配? → Term Query
│
├─ 需要全文搜索? → Match Query
│   ├─ 需要短语匹配? → Match Phrase
│   └─ 需要模糊匹配? → Match with fuzziness
│
├─ 需要组合条件? → Bool Query
│   ├─ 必须满足 → must
│   ├─ 应该满足 → should
│   └─ 必须不满足 → must_not
│
└─ 需要特殊查询? 
    ├─ 范围查询 → Range
    ├─ 存在性检查 → Exists
    └─ 地理位置 → Geo Queries

8. 实践记忆法

创建自己的查询模板库

java

// 常用查询模板
Map<String, String> queryTemplates = new HashMap<>();
queryTemplates.put("精确查询", "{\"term\": {\"{{field}}\": \"{{value}}\"}}");
queryTemplates.put("全文搜索", "{\"match\": {\"{{field}}\": \"{{value}}\"}}");
queryTemplates.put("布尔查询", "{\"bool\": {\"must\": [], \"should\": [], \"must_not\": []}}");
queryTemplates.put("范围查询", "{\"range\": {\"{{field}}\": {\"gte\": {{min}}, \"lte\": {{max}}}}}");

制作闪卡(Flashcards)

  • 正面:查询场景描述

  • 背面:对应的ES查询DSL

9. 理解设计哲学

Elasticsearch 查询 API 的设计遵循几个核心原则:

  1. 结构化:JSON格式,层次分明

  2. 组合性:可以灵活组合各种查询

  3. 明确性:每个查询有明确的目的和参数

  4. 性能导向:提供filter context避免评分开销

/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/tasks
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
/_cat/count
/_cat/count/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/health
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/thread_pool
/_cat/thread_pool/{thread_pools}
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}
/_cat/nodeattrs
/_cat/repositories
/_cat/snapshots/{repository}
/_cat/templates

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值