es5.x 到7.x 的版本变动,最大的变动是type的变动了
5.x 支持多种type 6.x 只能有一种type 7.x 将去除type 没有类型的概念了
官网文档:https://www.elastic.co/guide/en/elasticsearch/reference
EVN :ubuntu16.04
################## version ES7.15.1 ###################### ################## ---by Sea 2021-11-03 ###################### 1.下在ik分词器插件 地址: https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.15.1/elasticsearch-analysis-ik-7.15.1.zip 解压到:/opt/docker/elasticsearch/plugins/ik/ (zip包里面的所有文件) 2.运行elasticsearch sudo docker run -itd --restart=always --name=es_sigle --net=host -p 9200:9200 -p 9300:9300 \ --ulimit nofile=102400:102400 \ -e "http.cors.enabled=true" \ -e 'http.cors.allow-origin="*"' \ -e "discovery.type=single-node" \ -e node.name=es01 \ -e bootstrap.memory_lock=true \ --ulimit memlock = -1:-1 \ -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \ -v /opt/docker/elasticsearch/data:/usr/share/elasticsearch/data:rw \ -v /opt/docker/elasticsearch/logs:/usr/share/elasticsearch/logs:rw \ -v /opt/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins:rw \ docker.elastic.co/elasticsearch/elasticsearch:7.15.1 3.检查es是否启动 3.1浏览器访问测试是否正常(以下为正常) # curl http://127.0.0.1:9200/ { "name": "es01", "cluster_name": "my-application", "cluster_uuid": "0l6-CVNFQsyyBq80IqgLOA", "version": { "number": "7.15.1", "build_flavor": "default", "build_type": "tar", "build_hash": "83c34f456ae29d60e94d886e455e6a3409bba9ed", "build_date": "2021-10-07T21:56:19.031608185Z", "build_snapshot": false, "lucene_version": "8.9.0", "minimum_wire_compatibility_version": "6.8.0", "minimum_index_compatibility_version": "6.0.0-beta1" }, "tagline": "You Know, for Search" } 3.2 安装elasticsearch head :https://www.cnblogs.com/lshan/p/14120654.html 4.基本使用: 4.1 创建index (bxuser) curl -XPUT http://localhost:9200/bxuser 4.2 创建 mapping curl -XPOST http://localhost:9200/bxuser/_mapping -H 'Content-Type:application/json' -d' { "properties": { "remark": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_smart" }, "name": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_smart" }, "address": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_smart" } } }' 5.插入几条数据 curl -XPOST http://localhost:9200/bxuser/_create/1 -H 'Content-Type:application/json' -d' {"remark":"sea武力展示?印度陆军伞兵旅在中印边境地区开展空降演习","name":"sea","address":"china gongdong shengzhen futian","email":"lshan523@163.com"} ' curl -XPOST http://localhost:9200/bxuser/_create/2 -H 'Content-Type:application/json' -d' {"remark":"Sea将在开幕式上发表主旨演讲","name":"Sea","address":"台湾的前途只有一个选项 那就是两岸统一、民族复兴","email":"sea@mail.icil.cn"} ' curl -XPOST http://localhost:9200/bxuser/_create/3 -H 'Content-Type:application/json' -d' {"remark":"拜登约会岸田文雄 两人亲昵碰肘确认强化美日同盟","name":"拜登","address":"日本新增病例骤减,未必是病毒自我消亡!","email":"sea@mail.icil.cn"} ' curl -XPOST http://localhost:9200/bxuser/_create/4 -H 'Content-Type:application/json' -d' {"remark":"sea G20罗马峰会 ","name":"sea","address":"sea 重要主张广受赞誉 暖心瞬间","email":"lshan523@163.com"} ' 6 查询并高亮显示 curl -XPOST http://localhost:9200/bxuser/_search -H 'Content-Type:application/json' -d' { "query" : { "match" : { "remark" : "拜登 sea" }}, "highlight" : { "pre_tags" : ["<tag1>", "<tag2>"], "post_tags" : ["</tag1>", "</tag2>"], "fields" : { "content" : {} } } } '
二 常用操作:
1) 修改mapping(新增) :
官网:https://www.elastic.co/guide/en/elasticsearch/reference/7.15/indices-put-mapping.html
mapping是不支持删除属性的, 只能新增 ()
首先,创建一条index并指定mapping
curl -XPUT http://localhost:9200/mapping_update -H 'Content-Type:application/json' -d' { "mappings":{ "properties":{ "name":{"type":"text"} } } }' #创建成功,我们查看一下: curl -X GET localhost:9200/mapping_update?pretty #修改mapping新增一条属性age curl -XPUT http://localhost:9200/mapping_update -H 'Content-Type:application/json' -d' { "mappings":{ "properties":{ "age":{"type":"text"} } } }' #创建成功, 再次查看一下(mapping 增加了age): curl GET localhost:9200/mapping_update?pretty
2) 完全修改mapping (方案来自) 原文:https://www.iteye.com/blog/donlianli-1924721
Elasticsearch的mapping一旦创建,只能增加字段,而不能修改已经mapping的字段。但现实往往并非如此啊,有时增加一个字段,就好像打了一个补丁,一个可以,但是越补越多,最后自己都觉得惨不忍睹了。怎么办??
这里有一个方法修改mapping,那就是重新建立一个index,然后创建一个新的mapping。你可能会问,这要是在生产环境,可行吗?答案是,如果你一开始就采取了合适的设计,这个完全是可以做到平滑过渡的。
采取什么合理设计呢?就是我们的程序访问索引库时,始终使用同义词来访问,而不要使用真正的indexName。在reindex完数据之后,修改之前的同义词即可。明白了吗?
参考上面的思路,我们来一步一步做。
step1、创建一个索引,这个索引的名称最好带上版本号,比如my_index_v1,my_index_v2等。
step2、创建一个指向本索引的同义词。
curl -XPOST localhost:9200/_aliases -d ' { "actions": [ { "add": { "alias": "my_index", "index": "my_index_v1" }} ] } '
此时,你可以通过同义词my_index访问。包括创建索引,删除索引等。
step3,需求来了,需要更改mapping了,此时,你需要创建一个新的索引,比如名称叫my_index_v2(版本升级).,在这个索引里面创建你新的mapping结构。然后,将新的数据刷入新的index里面。在刷数据的过程中,你可能想到直接从老的index中取出数据,然后更改一下格式即可。如何遍历所有的老的index数据,请参考这里。
step4,修改同义词。将指向v1的同义词,修改为指向v2。http接口如下:
curl -XPOST localhost:9200/_aliases -d ' { "actions": [ { "remove": { "alias": "my_index", "index": "my_index_v1" }}, { "add": { "alias": "my_index", "index": "my_index_v2" }} ] } '
step5,删除老的索引。
curl -XDELETE localhost:9200/my_index_v1