Elasticsearch基本操作
所有的操作根据RESETFUL风格
索引
PUT /索引名
创建索引
我们可以通过先前下载的可视化插件验证结果http://localhost:9100
不过当前是什么都没有的。
我们可以给它在创建的时候指定字段的类型
- 字符串类型:text keyword
- 数值类型:long, integer, short, byte, double, float, half_float, scaled_float
- 日期类型:date
- 布尔值类型:boolean
- 二进制类型 binary
- 等等……
GET /索引名
查询索引信息
GET _cat/indices?v
查询所有索引信息
DELETE /索引名
删除索引
成功删除!
文档
简单操作
put /索引名/类型(不写默认_doc)/id
添加数据 索引不存在自动创建,字段不存在也会自己创建智能选择类型(存在错误)。
接着在添加几个数据
GET /索引名/类型/id
获取数据
POST(PUT)/索引/类型/ID{"字段":"值"...}
更新数据
不过这种请求不推荐。因为它是将所有的字段数据都要进行修改,如果你有一个字段没写或者写错了就会发生为空或者更新错了的情况。
所以我们推荐使用POST /索引/类型/ID/_update{"doc":{"字段":"值"}}
更新数据
先将其复原成先前的样子
再更新。
复杂操作
条件查询GET /索引/类型/_search?q=字段名:字段值
其中的score
代表着匹配度,匹配度越高分值越高。
我们首先在插入一个数据
匹配查询
查询字段值中匹配所给的值(包含)
GET /索引/类型/_search{"query":{"match":{"字段":"值"}}}
1 | GET /索引/类型/_search |
hits
:包含索引和文档的信息,查询的结果总数,查询出来的具体的文档。数据中的东西都可以遍历出来。可以通过分数来判断谁更加符合结果。
结果过滤
例如select name, age from student
1 | GET /索引/类型/_search |
排序操作
1 | GET /索引/类型/_search |
由于指定了排序规则。所以score就没有用了为null。
分页查询
1 | GET /索引/类型/_search |
from
代表起始数据(数据下标从0开始)
size
代表一页有多少条数据
布尔查询
1 | GET /索引/类型/_search |
must
(and),所有的条件都要符合 where id = 1 and name = xxx
should(or),所有的条件都要符合 where id = 1 or name = xxx
must_not
(not)所有条件都不符合
过滤器 filter
- gt 大于
- gte 大于等于
- lt 小于
- lte 小于等于
多条件匹配查询
匹配多个条件
1 | GET /索引/类型/_search |
精确查询
term
查询是直接通过倒排索引指定的词条进程精确查找的!
关于分词:
- term ,精确查询,对查询的值不分词,直接进倒排索引去匹配。
- match,会使用分词器解析! (先分析文档,然后在通过分析的文档进行查询!)
两个类型 text keyword
为了区分这两个类型。我们首先创建一个索引,字段规则。
添加数据
我们首先使用不同的分词器来查看效果
term是代表完全匹配,即不进行分词器分析,文档中必须包含整个搜索的词汇
match和term的区别是,match查询的时候,elasticsearch会根据你给定的字段提供合适的分析器,而term查询不会有分析器分析的过程。
match查询相当于模糊匹配,只包含其中一部分关键词就行
精确查询多个值
高亮查询
1 | GET /索引/类型/_search |
1 | GET /kylin/user/_search |
自定义高亮标签pre_tags
,post_tags
这些所有操作其实MySQL 也可以做,只是MySQL 效率比较低!