一.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"}]
}