ElasticSearch_02_ES的基本筛选条件
Posted 毛奇志
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch_02_ES的基本筛选条件相关的知识,希望对你有一定的参考价值。
系列文章目录
文章目录
前言
一、基本语法使用
1.1 _search接口获取所有数据
_search这个GET类型的接口,不需要params和body,可以查询整个es所有的数据
took:耗费了几毫秒
timed_out:是否超时,false是没有,默认无timeout
_shards:shards fail的条件(primary和replica全部挂掉),不影响其他shard。默认情况下来说,一个搜索请求,会打到一个index的所有primary shard上去,当然了,每个primary shard都可能会有一个或多个replic shard,所以请求也可以到primary shard的其中一个replica shard上去。
hits 返回es存放的所有的数据
hits.total:本次搜索,返回了几条结果
hits.max_score:score的含义,就是document对于一个search的相关度的匹配分数,越相关,就越匹配,分数也高
hits.hits:包含了匹配搜索的document的详细数据,默认查询前10条数据,按_score降序排序
1.2 文档操作
插入文档
PUT /ecommerce/product/1
"name" : "gaolujie yagao",
"desc" : "gaoxiao meibai",
"price" : 30,
"producer" : "gaolujie producer",
"tags": [ "meibai", "fangzhu" ]
PUT /ecommerce/product/2
"name" : "jiajieshi yagao",
"desc" : "youxiao fangzhu",
"price" : 25,
"producer" : "jiajieshi producer",
"tags": [ "fangzhu" ]
PUT /ecommerce/product/3
"name" : "zhonghua yagao",
"desc" : "caoben zhiwu",
"price" : 40,
"producer" : "zhonghua producer",
"tags": [ "qingxin" ]
PUT /ecommerce/product/1 表示的含义:ecommerce 电子商务是索引名称,product 产品是type类型名称,最后 1 表示序号
查询文档
GET /ecommerce/product/1
url 相同,只是 请求类型 改成了 GET,符合 restful 风格
修改文档
PUT /ecommerce/product/1
"name" : "jiaqiangban gaolujie yagao",
"desc" : "gaoxiao meibai",
"price" : 30,
"producer" : "gaolujie producer",
"tags": [ "meibai", "fangzhu" ]
url 相同,只是 请求类型 改成了 PUT,符合 restful 风格
修改文档底层原理:
- 修改本质是删除:es会将老的document标记为deleted(逻辑删除),然后新增我们给定的一个document,当我们创建越来越多的document的时候,es会在适当的时机在后台自动删除(物理删除)标记为deleted的document。
- 各个filed均替换(删除旧的,新建新的):document是不可变的,如果要修改document的内容,可以通过全量替换,直接对document重新建立索引,替换里面所有的内容。而且,替换必须带上所有的field,即使这个filed的值和之前相同,也要带上,否则其他数据会丢失。
查询所有的索引和查询所有的数据
GET _cat/indices?v&pretty
GET _search
删除文档
注意:在删除一个document之后,我们可以从侧面证明,它不是立即物理删除的,因为它的一些版本号等信息还是保留的。
删除之后,这里表示只剩下两个了,序号为1的没有了
二、各种各样的查询条件
2.1 查询所有
GET /ecommerce/product/_search
"query": "match_all":
2.2 值匹配和输出结构按price倒序输出
GET /ecommerce/product/_search
"query" :
"match" :
"name" : "yagao"
,
"sort": [
"price": "desc"
]
2.3 仅输出需要的数量
GET /ecommerce/product/_search
"query": "match_all": ,
"from": 1,
"size": 1
2.4 仅输出需要的字段
GET /ecommerce/product/_search
"query": "match_all": ,
"_source": ["name", "price"]
2.5 值匹配和范围匹配
GET /ecommerce/product/_search
"query" :
"bool" :
"must" :
"match" :
"name" : "yagao"
,
"filter" :
"range" :
"price" : "gt" : 25
2.6 match表示空格分词中任意一个匹配
1、全文检索会将输入的搜索串拆解开来,去倒排索引里面去一一匹配,只要能匹配上任意一个拆解后的单词,就可以作为结果返回
2、phrase search,要求输入的搜索串,必须在指定的字段文本中,完全包含一模一样的,才可以算匹配,才能作为结果返回
GET /ecommerce/product/_search
"query" :
"match" :
"producer" : "yagao producer"
2.7 match_phrase表示整个字符串完全匹配上
GET /ecommerce/product/_search
"query" :
"match_phrase" :
"producer" : "yagao producer"
GET /ecommerce/product/_search
"query" :
"match_phrase" :
"producer" : "zhonghua producer"
2.8 三种匹配强度must should must_not
GET /ecommerce/_search
"query":
"bool":
"must": [
"match":
"name": "yagao"
],
"should": [
"match":
"desc": "fangzhu"
,
"match":
"desc": "caoben"
],
"must_not": [
"match":
"price": 25
],
"minimum_should_match": 1
总结
对比学习法一种很快的学习方法,es的查询语句可以对比mysql的来学习
倒序输出,类似mysql的 order by xxx desc
限制输出数量,类似mysql的 limit xxx
仅输出需要的字段,类似mysql的 select filed1,filed2
值匹配和范围匹配,类似mysql的 where filed = xxx and num_bak > xxx
分词匹配 match
全值匹配 match_phrase
三个匹配强度 must should must not
以上是关于ElasticSearch_02_ES的基本筛选条件的主要内容,如果未能解决你的问题,请参考以下文章
ElasticSearch_02_使用docker安装elasticsearch6.8.0
ElasticSearch_02_使用docker安装elasticsearch6.8.0