Skip to content
鼓励作者:欢迎打赏犒劳

elk

安装教程:https://software.share888.top/note/devtool/detail/Elasticsearch.html

查看表列表

shell
GET _cat/indices?v

删除表

shell
DELETE test_index

别名

查看表别名

shell
GET /<index_name>/_alias

结果,表示 test_index_clean 有一个别名 my_data。

shell
{
  "test_index_clean": {
    "aliases": {
      "my_data": {}
    }
  }
}

查看所有表的别名

shell
GET _alias

查看某个别名指向哪些表

shell
GET /_alias/<alias_name>

查询

查询全部

shell
GET /test_index/_search

根据ID查询

shell
GET /your_index_name/_doc/doc_12345

批量查询

shell
GET /your_index_name/_search
{
  "query": {
    "terms": {
      "_id": ["doc_1", "doc_2", "doc_3"]
    }
  }
}

单字段查询 - keyword类型

shell
-- 单字段精确查询 user_id是keyword类型
GET /intel_assets_leaked_sessions/_search
{
  "query": {
    "term": {
      "user_id": "7595299113961292855"
    }
  }
}

排序

shell
GET intel_assets_leaked_sessions/_search
{
  "size": 10,
  "track_total_hits": true,
  "sort": [
    {
      "collect_date": {
        "order": "desc"
      }
    }
  ]
}

日常开发中最常用组合

对应的sql

sql
SELECT
    *
FROM
    表名
WHERE
    status = 'published'
    AND publish_date >= '2025-01-01'
    AND title LIKE '%elasticsearch%'
    OR priority = 'high' 
ORDER BY publish_date DESC
LIMIT 20;

对应的DSL

json
{
  "query": {
    "bool": {
      "must": [{"match": {"title": "elasticsearch"}}],
      "filter": [
        {"term": {"status": "published"}},
        {"range": {"publish_date": {"gte": "2025-01-01"}}}
      ],
      "should": [{"term": {"priority": "high"}}]
    }
  },
  "sort": [{"publish_date": "desc"}],
  "from": 0,
  "size": 20,
  "track_total_hits": true
}

Elasticsearch 常见查询分类速览

一、精确匹配类(用于 keyword、数值、布尔、日期)

查询类型说明示例
term单个精确值匹配{"term":{"status":"active"}}
terms多值匹配(任意一个){"terms":{"tags":["java","es"]}}
range范围查询(数字/日期){"range":{"age":{"gte":18,"lte":30}}}
exists字段存在(非 null){"exists":{"field":"email"}}
ids根据 _id 匹配{"ids":{"values":["1","2"]}}

二、全文搜索类(用于 text 类型,会分词)

查询类型说明示例
match标准全文检索(分词后 OR 关系){"match":{"content":"elasticsearch教程"}}
match_phrase短语匹配(顺序一致,slop 可调间隔){"match_phrase":{"content":"快速入门"}}
match_phrase_prefix短语前缀匹配(支持自动补全){"match_phrase_prefix":{"title":"弹"}}
multi_match在多个字段上执行 match{"multi_match":{"query":"搜索词","fields":["title","body"]}}
query_string支持 Lucene 语法的复杂查询{"query_string":{"default_field":"content","query":"(快速 AND 入门) OR 高级"}}

三、组合与逻辑查询

查询类型说明示例
bool组合多个子句(must/should/must_not/filter){"bool":{"must":[{"match":{"title":"ES"}}],"filter":[{"range":{"price":{"lte":100}}]}}}
constant_score包裹过滤查询,固定评分{"constant_score":{"filter":{"term":{"status":"published"}}}}

注意filter 子句不参与评分,可缓存,性能极高,适合范围/状态过滤。


四、模糊与通配符

查询类型说明示例
wildcard通配符(* 任意多字符,? 单个){"wildcard":{"name":"张*"}}
regexp正则表达式匹配{"regexp":{"email":".*@gmail\\.com"}}
fuzzy模糊匹配(编辑距离){"fuzzy":{"title":{"value":"elasticsearh","fuzziness":"AUTO"}}}
prefix前缀匹配{"prefix":{"city":"杭"}}

五、聚合(Aggregation)—— 统计、分组、指标

虽不属“查询”,但在实际业务中常与查询并用:

  • terms 聚合:按字段分组计数
  • avg / sum / min / max / stats 指标聚合
  • date_histogram:按时间间隔统计
  • nested / reverse_nested:处理嵌套对象

如有转载或 CV 的请标注本站原文地址