记忆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 的设计遵循几个核心原则:
-
结构化:JSON格式,层次分明
-
组合性:可以灵活组合各种查询
-
明确性:每个查询有明确的目的和参数
-
性能导向:提供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
2568

被折叠的 条评论
为什么被折叠?



