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

相关推荐
W***r263 小时前
SpringBoot整合easy-es
spring boot·后端·elasticsearch
oMcLin3 小时前
如何在Ubuntu 22.04 LTS上优化PostgreSQL 14集群,提升大数据查询的响应速度与稳定性?
大数据·ubuntu·postgresql
信创天地3 小时前
核心系统去 “O” 攻坚:信创数据库迁移的双轨运行与数据一致性保障方案
java·大数据·数据库·金融·架构·政务
それども4 小时前
ES KQL 支持词频统计吗
elasticsearch
zhyf1194 小时前
Max395(ubuntu24.04)AMD显卡GLM-4.7-UD-IQ1-M量化模型部署手册
大数据·elasticsearch·搜索引擎
小北方城市网4 小时前
微服务接口设计实战指南:高可用、易维护的接口设计原则与规范
java·大数据·运维·python·微服务·fastapi·数据库架构
武子康4 小时前
大数据-210 如何在Scikit-Learn中实现逻辑回归及正则化详解(L1与L2)
大数据·后端·机器学习
xiaobaishuoAI4 小时前
全链路性能优化实战指南:从瓶颈定位到极致优化
大数据·人工智能·科技·百度·geo
乾元5 小时前
如何把 CCIE / HCIE 的实验案例改造成 AI 驱动的工程项目——从“实验室能力”到“可交付系统”的完整迁移路径
大数据·运维·网络·人工智能·深度学习·安全·机器学习
xiaobaishuoAI5 小时前
后端工程化实战指南:从规范到自动化,打造高效协作体系
java·大数据·运维·人工智能·maven·devops·geo