一 Elasticsearch与MySQL对应关系表
MySQL | Elasticsearch |
Database | Index |
Table | Type |
Row | Document |
Column | Field |
Schema | Mapping |
Index | Everthing is indexed |
SQL | Query DSL |
SELECT * FROM table ... | GET http://... |
UPDATE table SET ... | PUT http://... |
参考优秀文档
-
MySQL 中的数据库(DataBase),等价于 ES 中的索引(Index)。
-
MySQL 中一个数据库下面有 N 张表(Table),等价于1个索引 Index 下面有 N 多类型(Type)。
-
MySQL 中一个数据库表(Table)下的数据由多行(Row)多列(column,属性)组成,等价于1个 Type 由多个文档(Document)和多 Field 组成。
-
MySQL 中定义表结构、设定字段类型等价于 ES 中的 Mapping。举例说明,在一个关系型数据库里面,Schema 定义了表、每个表的字段,还有表和字段之间的关系。与之对应的,在 ES 中,Mapping 定义索引下的 Type 的字段处理规则,即索引如何建立、索引类型、是否保存原始索引 JSON 文档、是否压缩原始 JSON 文档、是否需要分词处理、如何进行分词处理等。
-
MySQL 中的增 insert、删 delete、改 update、查 search 操作等价于 ES 中的增 PUT/POST、删 Delete、改 _update、查 GET。其中的修改指定条件的更新 update 等价于 ES 中的 update_by_query,指定条件的删除等价于 ES 中的 delete_by_query。
-
MySQL 中的 group by、avg、sum 等函数类似于 ES 中的 Aggregations 的部分特性。
-
MySQL 中的去重 distinct 类似 ES 中的 cardinality 操作。
-
MySQL 中的数据迁移等价于 ES 中的 reindex 操作。
二 ES命令练习
2.1 创建/查看索引库
ES的索引库是一个逻辑概念,类似MySQL中的Database
##创建索引
curl -XPUT 'http://192.168.10.101:9200/es_test'
##格式:put http://服务器ip:9200/索引库名称 #注意不能使用post
##查看索引
curl -XGET 'http://192.168.10.101:9200/_cat/indices?v&pretty'
2.2 创建/查看映射
类似MySQL中:create table es values(id int,name varchar(30),age int),创建一张表并创建相应属性和字段类型
##创建映射:post http://服务器ip:9200/索引库名称/类型名称/_mapping
post http://服务器ip:9200/es_wcc/doc/_mapping #在es_test索引库下的doc类型下创建映射
curl -H "Content-Type: application/json" -XPOST 'http://192.168.10.101:9200/es_test/doc/_mapping?include_type_name=true' -d '{"properties":{"name":{"type":"text"},"description":{"type":"text"},"studymodel":{"type":"keyword"}}}'
##查看映射
curl -H "Content-Type: application/json" -XGET 'http://192.168.10.101:9200/es_test/_mapping'
实例1:在“”在线json“”中压缩
{
"properties": {
"name": {
"type": "text"
},
"description": {
"type": "text"
},
"studymodel": {
"type": "keyword"
}
}
}
2.3 文档操作 #
2.31 添加文档:类似MySQL中insert into table_name values (value1, value2, value3);
put 或Post http://服务器ip:9200/es_test/doc/id值 #如果不指定id值ES会自动生成id,id值可以随便设置,如果id值重复了,就是修改之前的数据,不是创建 ******
##添加文档 :添加一个内容为实例2且id=1的文档
curl -H "Content-Type: application/json" -XPOST 'http://192.168.10.101:9200/es_test/doc/1' -d '{"name":"Bootstrap开发框架","description":"Bootstrap是由Twitter推出的一个前台页面开发框架,在行业 之中使用较为广泛。此开发框架包含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长页面开发的程序人员)轻松的实现一个不受浏览器限制的精美界面效果。","studymodel":"201001"}'
实例2
{
"name":"Bootstrap开发框架",
"description":"Bootstrap是由Twitter推出的一个前台页面开发框架,在行业之中使用较为广泛。此开发框架包含了大量的CSS、JS程序代码,可以帮助开发者(尤其是不擅长页面开发的程序人员)轻松的实现一个不受浏览器限制的精美界面效果。",
"studymodel":"201001"
}
2.32 根据id查询数据
##搜索文档:类似Mysql中的select * from table where id=1;
查询语句: get http://101.132.167.242:9200/es_test/doc/1
curl -H "Content-Type: application/json" -XGET 'http://192.168.10.101:9200/es_test/doc/1'
2.33 查询一个TYPE中所有数据
##查询所有记录:类似Mysql中的select * from table;查询一个TYPE中所有ROW
即在同一个TYPE下加/_search ,注意:使用postman查询会报400错误,只能使用GET
curl -H "Content-Type: application/json" -XGET 'http://192.168.10.101:9200/es_test/doc/_search'
2.34 条件查询
这里_search?q=属性:值 类似MySQL中 where 属性=值优秀文档
##查询名称中包括bootstrap关键字的记录:GET必须大写,否则报405,报错原因
curl -XGET http://192.168.10.101:9200/es_test/doc/_search?q=name:bootstrap
##查询学习模式为201001的记录
curl -XGET http://192.168.10.101:9200/es_test/doc/_search?q=studymodel:201001
2.4 DSL搜索
DSL(Domain Specific Language)是ES提出的基于json的搜索方式,在搜索时传入特定的json格式的数据来完成不同的搜索需求。
DSL比URI搜索方式功能强大,在项目中建议使用DSL方式来完成搜索
参考优秀文档
2.41 分页查询:传入from和size参数
插入多条数据验证即可,from从0开始,size类似Mysql中limit
2.42 精确查询:Term Query为精确查询,在搜索时会整体匹配关键字,不再将关键字分词。
2.5 更新文档
类似MySQL中的 UPDATE table_name SET column1 = value1 WHERE condition;
2.51 完全替换
可以添加新的属性,属性类型系统会自动设置,通过查询映射可看出默认类型
2.52 部分修改
2.6 删除文档
2.61 根据id删除:id可类比为MySQL中的表名:DROP TABLE table_name;
2.62 搜索匹配删除,将搜索出来的记录删除:类似MySQL:ALTER TABLE your_table
DROP COLUMN your_column;
三 使用IK分词器
---未完