赞
踩
一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要是用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更加简洁,更有层次,更易于实现缓存等机制。
一、基本Rest命令说明
1、命令
GET _cat/health
对应的就是head可视化界面的下面的信息(换句话说,可视化工具也是不断发送这个health命令,来回显当前数据库的健康值!)
1、命令
GET _cat/indices?v
1、命令
给索引(数据库表),给表中的字段设置类型
- PUT /索引
- {
- "mapping": {
- "properties": {
- "name": {
- "type": "text"
- },
- "age": {
- "type": "long"
- },
- "birthday": {
- "type": "date"
- }
- }
- }
- }
2、在head可视化工具中查看
3、获得test01的信息
可以通过GET请求,获得这个索引中的信息
(1)命令
(2)响应
4、拓展:如果我们没有给我们的索引中的字段设置类型,那么ES会默认给相关的字段设置类型!
之前创建guihui 索引的时候没设置字段的类型,我们通过GET命令查看一下字段的默认类型
创建一个索引、类型和文档,以及文档中的内容
(1)在kibana开发者工具中输入命令
- PUT 索引名/类型(快去掉了)/文档id
- {请求体}
第一次这个result就是created创建的意思
(2)进入到head可视化界面中,可以查看当前数据是否创建成功!
方式一:(这种方式存在弊端,如果第二次更新的内容少于原本存在的数据,那么就会丢失掉那部分数据!所以慎用!)
直接使用PUT的方式,将原来的数据进行覆盖
1、当前索引中的文档数据
2、直接通过PUT命令覆盖
版本号version会增加,现在变成了2;当前的状态变成了update
3、查看guohui索引的数据
更新成了李四等新数据
方式二:(更推荐使用这种方式)
通过POST命令来更新索引中的文档(行数据)
1、命令
更新命令多了一个"doc"
- POST /索引/类型/文档id/_update
- {
- "doc": {
- "name": "詹姆斯",
- "age": 99
- }
- }
删除文档
1、命令
DELETE 索引/类型/文档Id
2、查看head可视化界面
删除索引
1、命令
DELETE 索引
2、去可视化界面查看
guihui索引(数据库)被删除了!
索引test01数据
一、查询索引全部数据
1、命令
PUT 索引/类型/_search
二、查询文档通过文档的id
1、命令
GET 索引/类型/文档id
三、条件查询
1、命令
q代表着query的意思
GET 索引/类型/_search?q=name:李四
下面所讲的复杂查询由开头至结尾顺序学习,由浅入深
以下的数据均来自于查询该索引
一、带参数的查询
1.命令
- GET test01/_search
- {
- "query": {
- "match": { (match表示精确匹配,这里还可以换成其他的参数)
- "name": "张三"
- }
- }
- }
如果索引中存在某字段相似的,那么查询出来的结果还会有一个匹配度的数值,将来可能会按照分值来排序
将来:
hits会对应我们Java中的对象
total:查询的结果数
二、过滤结果
1.命令
_source命令:是过滤搜索结果的关键字
相当于MySQL 中的select 字段 from table where 判断条件
- GET test01/_search
- {
- "query": {
- "match": {
- "name": "王五"
- }
- },
- "_source":["name","age"]
- }
三、根据某个字段进行排序
类似于MySQL的order by ...desc/asc
1、命令
sort命令,下面的示例是查询name等于王五的数据,并且按照age进行升序排序
- GET test01/_search
- {
- "query": {
- "match": {
- "name": "王五"
- }
- },
- "sort": [
- {
- "age": {
- "order": "asc"
- }
- }
- ]
- }
四、分页查询
相当于SQL中的Limit
1、命令
from 和 size 命令,下面的实例是从第0个数据开始(和我们之前学习的分页的数据结果是一样的,起始都是从0开始),一页展示1条数据,所以和上面的搜索出的两条数据是不同的,现在是只展示了一条数据
- GET test01/_search
- {
- "query": {
- "match": {
- "name": "王五"
- }
- },
- "sort": [
- {
- "age": {
- "order": "asc"
- }
- }
- ],
- "from":0,
- "size":1
- }
五、布尔实现多条件的精确查询
must可以精确的匹配对应的数据,相当于SQL中的“and”,所有的条件都满足
1、命令
- GET test01/_search
- {
- "query": {
- "bool": {
- "must": [
- {
- "match": {
- "name": "王五"
- }
- },
- {
- "match": {
- "age": "11"
- }
- }
- ]
- }
- }
- }
六、布尔实现or类型查询
should关键字,相当于SQL 中的“or”,后面的条件满足其一即可被查询出来
1、命令
- GET test01/_search
- {
- "query": {
- "bool": {
- "should": [
- {
- "match": {
- "name": "王五"
- }
- },
- {
- "match": {
- "age": "11"
- }
- }
- ]
- }
- }
- }
七、布尔值查询-类似于SQL中的“not”
1、命令
must_not
下面的实例是查询年龄不是11岁的人
- GET test01/_search
- {
- "query": {
- "bool": {
- "must_not": [
- {
- "match": {
- "age": "11"
- }
- }
- ]
- }
- }
- }
八、在查询的时候,加过滤器
filter关键字,就是在查询的时候加上范围的过滤
gte: great than equals表示大于等于
lte: less than equals表示小于等于
去掉e就把等于去掉了
1、命令
- GET test01/_search
- {
- "query": {
- "bool": {
- "must": [
- {
- "match": {
- "name": "王五"
- }
- }
- ],
- "filter": {
- "range": {
- "age": {
- "gt": 10,
- "lt": 20
- }
- }
- }
- }
- }
- }
九、根据字段中的某个数据进行查询
可以精确的匹配到某条数据中包含某个数据,并且还能返回查询的结果的分值
1、命令
通过"match"关键字,里面输入索引中字段的名称和需要匹配的数据,ES的优势在于,想要匹配多个数据,直接用空格隔开即可,另外查询的结果还会对这些数据进行分值的评定,将来还便于我们根据分值来做排序
十、精确查询
精确查询是通过term关键字来实现的,他的底层是通过直接查询倒排索引,所以效率更高!
关于分词的解释:
(1)term:直接查询精确的
(2)match:会使用分词器(会先分析文档,然后通过分析的文档进行查询!)
所以综上所述,term的查询更高效
补充:
如果类型是text类型,那么是可以被分词器解析的;如果是keyword类型的,是不能被分词器解析,换句话说,如果我们索引中的某个字段的类型设置的是keyword类型,那么我想使用match或者term来查询这个字段匹配的,他只能查询出完全匹配的数据来,其他的数据差一个字符都不能被查询出来!
十一、高亮查询(重点)
重点就是highlight关键字
至此,关于ES详细的操作查询命令介绍完毕,尤其是高亮查询在将来的开发中会经常用到,比如日志定位等等。
后续还会持续更新,敬请期待~~~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。