下载安装Elasticsearch 和kibana
相对于数据库,Elasticsearch的强大之处就是可以模糊查询。具体安装过程就不细细描述了
docker run -it --name elasticsearch -d -p 9200:9200 -p 9300:9300 -p 5601:5601 elasticsearch
docker run -it -d -e ELASTICSEARCH_URL=http://127.0.0.1:9200 --name kibana --network=container:elasticsearch kibana
mapping说明
docker安装的版本ES、kibana版本均是7.5.1. ES的mapping非常类似于静态语言中的数据类型:声明一个变量为int类型的变量, 以后这个变量都只能存储int类型的数据。同样的, 一个number类型的mapping字段只能存储number类型的数据。
同语言的数据类型相比,mapping还有一些其他的含义,mapping不仅告诉ES一个field中是什么类型的值, 它还告诉ES如何索引数据以及数据是否能被搜索到。
当你的查询没有返回相应的数据, 你的mapping很有可能有问题。当你拿不准的时候, 直接检查你的mapping。
如何查看当前数据库里面的mapping(你可以用postman或者浏览器访问以下链接)
kibana请求 GET /product1/_mapping
返回结果:
{
"product1" : {
"mappings" : {
"properties" : {
"brand" : {
"type" : "long"
},
"categories" : {
"type" : "long"
},
"comprehensive" : {
"type" : "long"
}
}
}
}
}
mapping的创建及修改方式
- 第一种创建方式
就是直接插入数据,然后ES根据插入数据格式自动识别创建mapping,这种傻瓜式的方式非常简便,适合初学者。
如,创建一个ID为1 的新对象: http://127.0.0.1:9200/product/_doc/1
kibana请求 PUT /product1/_doc/1
{
"brand": 333,
"categories": 222,
"comprehensive": 11
}
-
第二种创建方式
kibana请求 PUT product1 { "mappings": { "properties": { "brand": { "type": "integer" }, "categories": { "type": "long" }, "comprehensive": { "type": "long" } } } }
-
第三种创建方式
已经创建了index(库已经创建),新增一个mapping
URL:http://127.0.0.1:9200/product1/_mapping?pretty PUT方式
注意,这种创建方式type[表名]是在URL中指定的,BODY部分只是指定了表结构:
kibana请求 PUT /product1/_mapping?pretty
{
"properties": {
"brand": {
"type": "long"
},
"categories": {
"type": "long"
},
"comprehensive": {
"type": "long"
}
}
}
mapping的修改
由于Elasticsearch底层使用了lucene的原因,不支持对mapping的修改,可使用索引重建的方式,步骤如下:
1.使用正确的mapping新建索引和类型
如需要将旧索引的itemId字段改为keyword类型,则执行以下请求:。
URL:http://127.0.0.1:9200/product2 PUT方式
设置mapping:
URL:http://127.0.0.1:9200/product2/_doc/_mappings?pretty POST方式
kibna 请求 POST product2/_doc/mappings?pretty
{
"mapping": {
"properties": {
"brands": {
"type": "long"
},
"categories": {
"type": "long"
},
"comprehensive": {
"type": "text"
}
}
}
}
2.使用reindex api将旧索引数据导入新索引
索引重建后可使用reindex命令迁移数据,如将product1数据迁移至product2请求如下:
POST /_reindex
{
"source": {
"index": "product1",
"query": {
"match_all": {}
}
},
"dest": {
"index": "product2"
}
}
3.删除旧索引
DELETE /product1
4.创建索引,索引名为原来的索引名
PUT product1
{
"mappings": {
"properties": {
"brand": {
"type": "long"
},
"brands": {
"type": "long"
},
"categories": {
"type": "long"
},
"comprehensive": {
"type": "long"
}
}
}
}
5.reindex将数据复制回去
POST /_reindex
{
"source": {
"index": "product2",
"query": {
"match_all": {}
}
},
"dest": {
"index": "product1"
}
}
6.删除那个创建的临时索引
DELETE product2