ES

本文深入探讨了Elasticsearch的基本操作,包括增删改查(CRUD)的实现方式,以及如何通过DSL查询与过滤来提升查询效率和灵活性。从简单的RESTful API调用到复杂的查询构建,全面解析ES的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.ES的基本操作

(1) 完成es的crud

​ index : 索引库 (es) 数据库(database) 索引库 index库(lucene)

​ type : 表(类型) table documents

​ id:某一个条数据 column document(field)

(2)es的crud

#新增
PUT crm/employee/1
{
  "name":"xxxx",
  "age":18
}
#查询
GET crm/employee/1

#修改
POST crm/employee/1
{
  "name":"yyyy",
  "age":28
}

#删除
DELETE crm/employee/1

#没有指定id 字段生成id
POST crm/employee
{
  "name":"yyyy",
  "age":28
}

# AW8iLW-mRN4d1HhhqMMJ
GET crm/employee/AW8iLW-mRN4d1HhhqMMJ

GET _search

(3)es 查询特殊的写法

# 查询所有
GET _search
#漂亮格式
GET crm/employee/AW8iLW-mRN4d1HhhqMMJ?pretty

#指定返回的列
GET crm/employee/AW8iLW-mRN4d1HhhqMMJ?_source=name,age

#不要元数据 只返回具体数据
GET crm/employee/AW8iLW-mRN4d1HhhqMMJ/_source

(4)局部修改

#修改 --覆盖以前json
POST crm/employee/AW8iLW-mRN4d1HhhqMMJ
{
  "name":"yyyy888"
}

#局部更新
POST crm/employee/AW8iLW-mRN4d1HhhqMMJ/_update
{
  "doc":{
    "name":"baocheng"
    }
}

(5)批量操作—了解

POST _bulk
{ "delete": { "_index": "itsource", "_type": "employee", "_id": "123" }}
{ "create": { "_index": "itsource", "_type": "blog", "_id": "123" }}
{ "title": "我发布的博客" }
{ "index": { "_index": "itsource", "_type": "blog" }}
{ "title": "我的第二博客" }

(6)批量查询

普通查询:
GET  crm/employee/id
批量查询:
GET itsource/blog/_mget
{
  "ids" : [ "123", "AW8iQAxERN4d1HhhqMML" ]
}

(7)查询条件

#分页查询
GET crm/student/_search?size=3
GET crm/student/_search?from=2&size=2

#根据条件查询 --如果条件比较多 就不适合
GET crm/student/_search?q=age:200 表示查询age=200的人
GET crm/student/_search?size=3&q=age[200 TO 800] 查询age范围到200到800的人,并查询三条数据

如果上面的查询涉及条件比较多,就不适合使用

二.DSL查询与过滤

SQL是关系型数据库查询语言

2.1 什么叫DSL

由ES提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询。

DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现。

DSL分成两部分:

​ DSL查询

​ DSL过滤

2.2 DSL过滤和DSL查询在性能上的区别

(1) 过滤结果可以缓存并应用到后续请求。

​ (2) 查询语句同时匹配文档,计算相关性,所以更耗时,且不缓存。

(3)过滤语句可有效地配合查询语句完成文档过滤。

原则上,使用DSL查询做全文本搜索或其他需要进行相关性评分的场景,其它全用DSL过滤。

2.3 DSL查询

GET crm/student/_search
{
"query": {
   "match_all": {}
},
"from": 0, 
"size": 3,
"_source": ["name", "age"],
"sort": [{"age": "asc"}]
}

2.4 DSL过滤

#DSL过滤 -->  name = 'tangtang'  --支持缓存
#select * from student where name=tangtang and age = 500
GET crm/student/_search
{
"query": {
   "bool": {
     "must": [
       {"match": {
         "name": "tangtang"
       }}
     ],
     "filter": {
        "term":{"age":500}
     }
   }
},
"from": 0, 
"size": 3,
"_source": ["name", "age"],
"sort": [{"age": "asc"}]
}
#select * from student where age = 500 and name != 'tangtang'

GET crm/student/_search
{
"query": {
   "bool": {
     "must_not": [
       {"match": {
         "name": "tangtang"
       }}
     ],
     "filter": {
        "term":{"age":500}
     }
   }
},
"from": 0, 
"size": 3,
"_source": ["name", "age"],
"sort": [{"age": "asc"}]
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值