ElasticSearch(三)常用DSL语句解析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ElasticSearch(三)常⽤DSL语句解析
⼀、前⾔
执⾏命令⾏操作es的⽅式有⼏种,⽐如使⽤postman,或者我们前⾯安装的kibana客户端,或者JavaApi等等,这篇⽂章重点介绍⽤kibana来操作我们的索引库。

DSL语句:领域专⽤语⾔,由叶⼦查询⼦句和复合查询⼦句两种⼦句组成。

Elasticsearch提供了基于JSON的DSL来定义查询。

⼆、索引部分
索引创建
#1、创建索引库,同时设置分词器【有梦想的肥宅】
PUT /zh_user
{
"settings": {
"index": {
"analysis.analyzer.default.type": "ik_max_word"
}
}
}
PS:PUT请求具有幂等性,如果重复执⾏同样的语句创建索引库会报错
索引查询
查看所有索引
#2、查询所有索引【有梦想的肥宅】
GET /_cat/indices?v
查看单个索引
#3、查询单个索引【有梦想的肥宅】
GET /zh_user
索引删除
#4、删除索引库【有梦想的肥宅】
DELETE /zh_user
三、⽂档部分
创建⽂档
#5、创建⽂档【格式:POST /索引名称/类型(7.6.1版本默认是_doc)/id】
POST /zh_user/_doc/1/
{
"name": "有梦想的肥宅",
"sex": "男",
"age": 27,
"address": "⼴西南宁",
"remark": "有趣⼜上进的灵魂~"
}
PS:创建⽂档要⽤POST,如果没有指定id的话,es会⾃动⽣成,指定了就⽤我们指定的id
查询⽂档
主键查询
#6、根据主键查询⽂档(数据)【有梦想的肥宅】
GET /zh_user/_doc/1
全查询
#7、全量查询索引下⽂档(数据)【有梦想的肥宅】
GET /zh_user/_search
修改⽂档
全量修改
#8、全量修改⽂档【格式:PUT /索引名称/类型(7.6.1版本默认是_doc)/id】
PUT /zh_user/_doc/1/
{
"name": "有梦想的肥宅【更新】",
"sex": "男",
"age": 27,
"address": "⼴西南宁",
"remark": "有趣⼜上进的灵魂~"
}
局部修改
#9、局部修改⽂档【格式:PUT /索引名称/类型(7.6.1版本默认是_doc)/id】
POST /zh_user/_update/1/
{
"doc":{
"name": "有梦想的肥宅【更新】",
"sex": "男【更新】",
"address": "⼴西南宁【更新】"
}
}
删除
#10、删除索引库内的⽂档(数据)【有梦想的肥宅】
DELETE /zh_user/_doc/1
四、查询操作部分
条件查询
#11、条件查询【有梦想的肥宅】
GET /zh_user/_search
{
"query":{
"match":{
"sex":"男"
}
}
}
分页查询
#12、分页查询【有梦想的肥宅】
GET /zh_user/_search
{
"query":{
"match":{
"sex":"男"
}
},
"from":0,
"size":2
}
排序查询
#13、排序查询【有梦想的肥宅】
GET /zh_user/_search
{
"query":{
"match_all":{} #表⽰查询全部数据
},
"sort":{
"age":{
"order":"desc"
}
}
}
多条件查询
#14、多条件查询【有梦想的肥宅】
GET /zh_user/_search
{
"query":{
"bool":{ #表⽰需要进⾏条件过滤
"must":[{ #表⽰必须满⾜下⾯的条件,并且参与计算分值,常⽤的⼦句还有should,表⽰“或”的意思
"match":{
"address":"⼴西南宁"
}
},{
"match":{
"sex":"男"
}
}]
}
}
}
范围查询
#15、范围查询【有梦想的肥宅】
GET /zh_user/_search
{
"query": {
"bool": { #表⽰需要进⾏条件过滤
"filter": [{ #返回的⽂档必须满⾜filter⼦句的条件。

但是跟Must不⼀样的是,不会计算分值,并且可以使⽤缓存。

【不算分的场景使⽤这个效率会提升】 "range": {
"age": {
"gt": 1 #表⽰查询年龄⼤于1岁的⼩伙伴~
}
}
}]
}
}
}
查询分词结果
#16、查询分词结果【有梦想的肥宅】
GET /zh_user/_doc/1/_termvectors?fields=address
PS:这条语句的意思是,查询索引库zh_user下id为1的,字段为address的数据分词的结果
也可以直接对⼀段⽂字进⾏分词结果查询:
POST _analyze
{
"text": ["⼴西南宁青秀区"],
"analyzer": "ik_max_word" #分词器:standard【中⽂单字分词】、ik_smart【最粗粒度拆分】、ik_max_word【最细粒度的拆分】
}
完全匹配
为了更好理解完全匹配的概念,我们先看⼀个例⼦:
PS:match:分词后搜索。

⽐如分词后有N个分词,只要匹配上其中⼀个就可以返回数据了。

GET /zh_user/_search
{
"query":{
"match":{
"name" : "梦想哈"
}
}
}
#17、完全匹配查询【有梦想的肥宅】
PS:match_phrase:分词后搜索。

与match不同的是,match_phase分出来的词必须全部在搜索结果中,且位置顺序是⼀样的。

PS:这⾥说的完全匹配不是说必须输⼊“有梦想的肥宅【更新】”才能精确匹配出来,⽽是分词后顺序⼀致就可以查询出来
GET /zh_user/_search
{
"query":{
"match_phrase":{
"name" : "梦想哈"
}
}
}
⾼亮查询
#18、⾼亮查询【有梦想的肥宅】
GET /zh_user/_search
{
"query": {
"match_phrase": {
"name": "有梦想"
}
},
"highlight": {
"fields": {
"name": {} #表⽰对当前字段进⾏⾼亮处理
}
}
}
聚合/分组查询
#19、聚合查询【有梦想的肥宅】
GET /zh_user/_search
{
"aggs":{ #表⽰聚合操作
"age_group":{ #分组名称,可以随便起
"terms":{ #表⽰分组操作,也可以使⽤avg来求平均值
"field":"age" #表⽰对哪⼀个字段进⾏分组
}
}
},
"size":0 #表⽰不查询原始数据,只查询分组结果
}
PS:ES进⾏聚合查询时,对应字段的类型只能是整形等,如果是“text”等类型是⽆法进⾏聚合分组查询的。

五、映射关系部分
映射关系可以理解成数据库中的表结构,那么我们来看⼀下怎么玩这个内容:#20、创建索引库,并设置映射【有梦想的肥宅】
PUT /zh_user_new #创建索引库
PUT /zh_user_new/_mapping
{
"properties": {
"name":{
"type": "keyword", #关键字类型,不做分词操作
"index": true #表⽰此字段可以被⽤来查询
},
"sex":{
"type": "text", #text类型,可以分词
"index": true
},
"age":{
"type": "long", #long类型,表⽰数值
"index": true
},
"address":{
"type": "text",
"index": true
},
"reamrk":{
"type": "text",
"index": false #表⽰此字段不可以被⽤来查询
}
}
}。

相关文档
最新文档