by shihang.mai
基本概念
索引、类型、文档 可以直接类比 mysql的库、表、记录
倒排索引
如果我们有一张电影表,有1000K数据
create table `tb_view`(
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(10) NOT NULL COMMENT '电影名'
)
如果我们用sql查询比卡超
select * from tb_view where name like '%比卡超%'
那么会每一条去匹配,从而找出所有比卡超相关的记录,非常的慢
如果是使用倒排索引,会将所有电影名分词
,然后维护一张倒排索引表
,一共两列
名词 | 文档序号 |
---|---|
比卡超 | 1,2,3,5 |
大大 | 3 |
那么查询比卡超,只需要直接查询1,2,5的文档即可。例如搜索【比卡超大大】,那么文档3同时命中,而二档1,2,5只命中一个,那么会出现不同的相关度
,即score
命令
ES都是用restful风格操作的
命令 | 作用 | 举例 |
---|---|---|
/_cat | 查看ES状态 | _cat/nodes 查看es的节点 _cat/health 查看es的健康状态 _cat/master 查看es主节点信息 _cat/indices 查看es中的所有索引 |
put | 增加or覆盖文档 | put 索引名/类型/唯一标识 json内容唯一标识必填 当es中存在该标识做覆盖操作(每一次操作,版本和序列号都会+1), 如不存在,做插入操作 |
post | 增加or覆盖文档 | post 索引名/类型/(唯一标识) json内容 唯一标识非必填 如不写,则es会默认分配一个唯一标识并且每次不一样。 如写,那么es中存在该标识做覆盖操作(每一次操作,版本和序列号都会+1),如没,做插入操作 |
get | 获取文档 | get 索引名/类型/唯一标识 其中_seq_no 每更新一次就会加1 |
post _update | 更新文档 | post 索引名/类型/唯一标识/_update { doc:json内容 } 存在的key做覆盖,不存在key做增加 |
delete | 删除文档or删除索引 | delete 索引名/类型/唯一标识 delete 索引名 |
POST _bulk | 批量 | POST /_bulk {"delete":{"_index":"testindex","_type":"testtype","_id":"1"}} {"create":{"_index":"testindex","_type":"testtype","_id":"1"}} {"m":"mai"} {"index":{"_index":"testindex","_type":"testtype"}} {"m":"msh"} {"update":{"_index":"testindex","_type":"testtype","_id":"1"}} {"doc":{"m":"maishihang"}} |
query | 查询文档 | GET 索引名/_search {"query":{}},常用match、bool、filter、term |
aggs | 对查询结果进行组合 | GET 索引名/_search {"aggs":{}} |
mapping | 获取索引属性类型 | GET 索引名/_mapping PUT 索引 {"mapping":{}}创建映射 PUT 索引/_mapping {}增加映射 并不存在修改映射 |
_reindex | 迁移数据(修改映射的方法) | POST _reindex {} |
_analyze | 分词 | POST _analyze {"analyzer":"分词器","text":"值"} 下载分词器到plugins目录即可,并且里面的config可以配置自定义词库 |
https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html