Elasticsearch入门(二)-- 基本的增删改查操作以及复杂查询语句
一、增删改查基本操作
1、创建一个索引
PUT /索引名/类型名/文档id
{请求体}
命令如下:
执行结果:
2、创建索引,并设置字段类型
PUT /索引名/类型名/文档id
{"mapping":{设置字段类型}}
3、获取指定索引的信息
GET 索引名
4、修改数据
1)、用put请求修改
注意,put请求是全量修改,即全字段修改,如果有字段不传,则覆盖为空
2)、用post请求修改
我们现在推荐用post请求修改,因为post请求比较灵活,非全量修改
POST /索引名/_update/文档id
5、简单的条件查询
GET 索引名/_search?q=字段名:查询的值
这里现在推荐,不带type,即语句中的 /_doc 不再携带
6、删除
1)、删除索引
DELETE 索引名
2)、删除文档
DELETE 索引名/_doc/文档id
二、复杂查询
上面说明的查询中,查询结果为:
上图中的_score字段,指的是查询出的结果的权重,以后搜索数据时,可以依据权重来显示
首先我们先创建两个文档,作为之后查询的数据
1、查询条件封装为对象
GET 索引名/_search
{
"query":{ // 查询条件
"match": { // 查询对象
"name": "三" // 查询的参数
}
}
}
2、只查指定的数据字段
3、排序
4、分页查询
数据下标也是从0开始
5、布尔查询
1)、must (类似mysql中的and)
2)、should (类似mysql中的 or)
3)、must_not (类似mysql中的 not )
6、过滤器
- gt 大于
- gte 大于等于
- lt 小于
- lte 小于等于
7、匹配多个条件
8、使用倒排索引查询
term 查询是直接通过倒排索引指定的词条进行精确查找的
首先我们看match查询:
我们可以发现,这里不仅将 【三狗】这一条数据查询出来,而且将【张三】那一条数据也查出来了,原因就是 match 查询会使用分词器,将要查的 【三狗】这个查询条件,进行了分词,然后再查询。
接下来我们看使用 term来进行匹配查询:
结果非常的amazing呀,竟然查不到,是怎么回事呢?
原来,term会通过倒排索引来进行查询,倒排索引是以一个个的词汇作为索引,我们这里的【三狗】,不会识别为一个词汇,就会进行分词,分为【三】和【狗】,所以倒排索引中,没有以【三狗】的词汇索引,是有【三】和【狗】的词汇索引,所以这里使用term查询【三狗】的时候,在倒排索引里查不到。
1)、keyword类型
如果将字段类型设置为keyword的话,此字段就不会被分词,如下图,我们先创建一个索引,并设置好字段的类型,将des字段设置为keyword
然后添加好数据
然后,我们使用term,以name作为查询条件,查询
我们发现,能查到值,再接着,我们以des为条件查询
我们神奇的发现,查不到值,因为des字段的类型为keyword,倒排索引中不会分词,所以des字段的【三】,在倒排索引中没有,当然就查不到数据,那么我们以【法外狂徒张三】为条件查找呢?
可以看到,查到数据了。至此,我们可以明白,将字段类型设置为keyword后,就不会进行分词解析。
9、高亮查询
上图中的需要高亮的文字,默认是用 【em】标签来选中的,那如果我们想要自定义标签怎么办呢?如下图
至此,我们已经学习了
- 匹配查询
- 按照条件匹配
- 精确匹配查询
- 区间范围匹配
- 匹配字段过滤
- 多条件查询
- 高亮查询
如果想要用类似mysql 中的 and 或者 or 条件查询,可以使用布尔查询;
如果想要用类似mysql 中的 范围查询,即大于或者等于之类的,可以使用filter过滤查询;