elasticsearch 查询检索

一、查询方式列举

1、多维度查询 关键词:bool must match

复制代码
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "server_name": "www.test.com"
          }
        },
        {
          "range": {  //时间查询
            "createTime": {
              "gte": "2025-04-14T00:00:00+08:00",
              "lte": "2025-04-15T00:00:00+08:00"
            }
          }
        }
      ]
    }
  },
  "_source": {
    "includes": [  //查询字段
      "title",
      "price"
    ],
    "exclude": [   //排除字段
      "organId"
    ]
  }
}

2、模糊查询 关键词:wildcard

匹配出状态码status 以 5 开头的日志

复制代码
{
  "query": {
    "wildcard": {"status": "5*"}
  }
}

3、指定某个值 同时匹配多个字段 关键词:multi_match

query 要查询的值

fields 要匹配的字段【数组】

匹配出 字段code和status 为400的所有日志

复制代码
{
  "query": {
    "multi_match": {
        "query":    "400",
        "fields":   [ "code", "status" ]
    }
  }
}

4、一个字段查询多个值

关键词:terms

{ "字段":[ 要匹配的多个值 ] }

复制代码
{
  "query": {
    "terms": {
        "status": ["400","402","406"]
    }
  }
}

5、字段排序

复制代码
//单字段
{
  "sort": {
    "createTime": {
      "order": "asc"
    }
  }
}
//多字段
{
    "sort": [
        {
            "createTime": {
                "order": "asc"
            }
        },
        {
            "updateTime": {
                "order": "desc"
            }
        }
    ]
}

6、高量查询

复制代码
GET /megacorp/employee/_search
{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    },
    "highlight": {
        "fields" : {
            "about" : {}
        }
    }
}

7、自定义高亮

复制代码
{
  "query": {
    "term": {
      "description": {
        "value": "iphone"
      }
    }
  },
  "highlight": {
    "post_tags": ["</span>"], 
    "pre_tags": ["<span style='color:red'>"],
    "fields": {
      "*":{}
    }
  }
}

8、模糊查询(fuzzy)

复制代码
fuzzy 查询是 term 查询的模糊等价。它允许用户搜索词条与实际词条的拼写出现偏差,但是偏差的编辑距离不得超过2:
GET /heima/_search
{
  "query": {
    "fuzzy": {
        "title": {
            "value":"appla",
            "fuzziness":1
        }
    }
  }
}

9、指定间隔分组

interval:间隔,

min_doc_count:过滤为0的分组

复制代码
{
  "size":0,
  "aggs":{
    "price":{
      "histogram": {
        "field": "price",
        "interval": 5000,
        "min_doc_count": 1
      }
    }
  }
}

10、elasticsearch 深分页

产生原因:from、size 两字段过大,es默认是10000
解决方式:
(1)深度分页之scroll,滚动查询、每次请求两条。可以定制 scroll = 5m意味着该窗口过期时间为5分钟。
复制代码
 GET /student/_search?scroll=5m
 {
   "query": {
     "match_all": {}
   },
   "size": 2
 }

后边查询的时候需要带上 _scroll_id 参数

复制代码
 GET /_search/scroll
 {
   "scroll":"5m",
   "scroll_id":"DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAC0YFmllU"
 }
(2)search_after 使用索引全局唯一标识字段 、官方推荐使用 _uid 作为全局唯一值,但是只要能表示其唯一性就可以。
复制代码
  GET /student/_search
  {
    "query":{
      "match_all": {}
    },
    "size":2,
    "sort":[
     {
        "uid": "desc"
    }  
   ]
 }

下一次分页,需要将上述分页结果集的最后一条数据的值带上。

复制代码
  GET /student/student/_search
  {
    "query":{
      "match_all": {}
    },
    "size":2,
    "search_after":[1005],
    "sort":[
      {
       "uid": "desc"
     }  
   ]
 }
深分页对比
分页方式 性能 优点 缺点 场景
from+size 灵活性好,实现简单 深度分页问题 数据量比较小,能容忍深度分页问题
scroll 解决了深度分页问题 无法反应数据的实时性(快照版本),维护成本高,需要维护一个 海量数据的导出需要查询海量结果集的数据
search_after 性能最好、不存在深度分页问题、能够反映数据的实时变更 实现复杂,需要有一个全局唯一的字段、连续分页的实现比较复杂,因为每一次查询都需要上次查询的结果 海量数据的分页

注: ElasticSearch Java API之高级查询(分页查询,高亮查询,正则表达式查询,聚合查询等)

参考:
https://blog.csdn.net/qq_37774171/article/details/122931766
https://blog.csdn.net/qq_42402854/article/details/126615064

相关推荐
java_logo3 小时前
Docker 部署 Elasticsearch 全流程手册
大数据·运维·mongodb·elasticsearch·docker·容器
墨香幽梦客3 小时前
掌控制造脉络:电子元器件行业常用ERP系统概览与参考指南
大数据·人工智能
B站_计算机毕业设计之家4 小时前
python舆情分析可视化系统 情感分析 微博 爬虫 scrapy爬虫技术 朴素贝叶斯分类算法大数据 计算机✅
大数据·爬虫·python·scrapy·数据分析·1024程序员节·舆情分析
汤姆yu4 小时前
2026版基于python大数据的电影分析可视化系统
大数据·python·1024程序员节·电影分析可视化
QMY5205204 小时前
TikTok 独立 IP 解决方案:独享静态住宅 IP + 环境隔离 + 粘性会话
大数据·jupyter·数据挖掘·数据分析·postman·1024程序员节
熟悉的新风景4 小时前
window安装Elasticsearch(es)
大数据·elasticsearch·jenkins
励志成为糕手4 小时前
Hive数据仓库:架构原理与实践指南
大数据·数据仓库·hive·1024程序员节·hql
isNotNullX5 小时前
一文讲清:数据清洗、数据中台、数据仓库、数据治理
大数据·网络·数据库·数据分析·1024程序员节
云飞云共享云桌面5 小时前
苏州精密机械制造企业一台云服务器带8个SolidWorks研发
大数据·运维·服务器·自动化·制造
墨香幽梦客5 小时前
探索五款主流生产制造ERP,助力注胶工艺高效管理与升级
大数据·制造