安装

https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html

v5.6.6

  1. docker pull docker.elastic.co/elasticsearch/elasticsearch:6.4.3
  2. docker run -p 29200:9200 -p 29300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:6.4.3

v7.10.2

  1. docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.2
  2. docker run -p 9200:9200 -e "discovery.type=single-node" -e "xpack.security.enabled=true" docker.elastic.co/elasticsearch/elasticsearch:7.10.2
  3. # docker-compose
  4. es7:
  5. image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2
  6. ports:
  7. - "9200:9200"
  8. volumes:
  9. - "./es7/config:/usr/share/elasticsearch/config"
  10. - "./es7/data:/usr/share/elasticsearch/data"
  11. - "./es7/logs:/usr/share/elasticsearch/logs"
  12. - "./es7/plugins:/usr/share/elasticsearch/plugins"
  13. environment:
  14. - discovery.type=single-node
  15. - xpack.security.enabled=false
  16. - TAKE_FILE_OWNERSHIP=true

密码设置

  1. # 获取docker默认配置
  2. docker cp [docker ID]:/usr/share/elasticsearch/config .
  3. # 设置密码--逐一设置
  4. ./bin/elasticsearch-setup-passwords interactive
  5. # 设置密码--自动生成随机密码
  6. ./bin/elasticsearch-setup-passwords auto

Spring版本支持

  • Spring Data Elasticsearch 4.1 - Spring 5.3 - Elasticsearch 7.9.3 - Spring Boot 2.4.x
  • Spring Data Elasticsearch 4.0 - Spring 5.2 - Elasticsearch 7.6.2 - Spring Boot 2.3.x
  • Spring Data Elasticsearch 3.2 - - Elasticsearch 6.8.1 - Spring Boot 2.2.x
Spring Data Release Train Spring Data Elasticsearch Elasticsearch Spring Boot
2020.0.0[1] 4.1.x[1] 7.9.3 2.4.x[1]
Neumann 4.0.x 7.6.2 2.3.x
Moore 3.2.x 6.8.12 2.2.x
Lovelace 3.1.x 6.2.2 2.1.x
Kay[2] 3.0.x[2] 5.5.0 2.0.x[2]
Ingalls[2] 2.1.x[2] 2.4.0 1.5.x[2]

备份与导入

https://github.com/taskrabbit/elasticsearch-dump

工具2:esm:https://github.com/medcl/esm-v1/releases 基于go实现,推荐

  1. # 安装
  2. npm install elasticdump -g
  3. # 使用
  4. elasticdump \
  5. --input=http://production.es.com:9200/my_index \
  6. --output=http://staging.es.com:9200/my_index \
  7. --type=analyzer
  8. elasticdump \
  9. --input=http://production.es.com:9200/my_index \
  10. --output=http://staging.es.com:9200/my_index \
  11. --type=mapping
  12. elasticdump \
  13. --input=http://production.es.com:9200/my_index \
  14. --output=http://staging.es.com:9200/my_index \
  15. --type=data

es-head

head工具安装

  1. docker run -p 9100:9100 mobz/elasticsearch-head:5

常用操作

  1. # 查看index
  2. curl 127.0.0.1:9200/_cat/indices?v
  3. curl 127.0.0.1:9200/_cat/indices/${index}/?v
  4. # mapping查看
  5. curl 127.0.0.1:9200/index_name/_mapping
  6. curl 127.0.0.1:9200/index_name/_mapping/${mapping}
  7. # aliases别名查看
  8. curl 127.0.0.1:9200/_aliases
  9. # stats状态查看
  10. curl 127.0.0.1:9200/${index}/_stats
  11. # 数据导入
  12. curl -XPOST 192.168.1.1:9200/_reindex -d '{"source":{"index":"old_index"},"dest":{"index":"new_index","version_type":"internal"}}'

查询API

match、term、match_phrase、query_string的区别

  • term查询keyword字段。term不会分词。而keyword字段也不分词。需要完全匹配才可以。
  • term查询text字段。因为text字段会分词,而term不分词,所以term查询的条件必须是text字段分词后的某一个。
  • match查询keyword字段。match会被分词,而keyword不会被分词,match的需要跟keyword的完全匹配可以。
  • match查询text字段match分词,text也分词,只要match的分词结果和text的分词结果有相同的就匹配。
  • match_phrase匹配keyword字段。match_phrase会被分词,而keyword不会被分词,match_phrase的需要跟keyword的完全匹配才可以。
  • match_phrase匹配text字段。match_phrase是分词的,text也是分词的。match_phrase的分词结果必须在text字段分词中都包含,而且顺序必须相同,而且必须都是连续的。
  • query_string查询text类型的字段。和match_phrase区别的是,query_string查询text类型字段,不需要连续,顺序还可以调换。 | | keyword(不会分词) | text(分词) | | —- | —- | —- | | term(不会分词) | 完全匹配 | 是分词后的某一个 | | match(分词) | 完全匹配 | 分词结果有匹配 | | match_phrase(分词) | 完全匹配 | 分词结果都包含,顺序连续且一致 | | query_string(分词) | 完全匹配 | 分词结果都包含,无顺序要求 |

插件安装

分词器hanlp安装-v7.10.2

插件:https://github.com/KennFalcon/elasticsearch-analysis-hanlp
注意使用docker挂载本地目录时需要指定参数:TAKE_FILE_OWNERSHIP=true

  1. ./bin/elasticsearch-plugin install https://github.com/KennFalcon/elasticsearch-analysis-hanlp/releases/download/v7.10.2/elasticsearch-analysis-hanlp-7.10.2.zip
  2. # 创建索引
  3. curl -X PUT "localhost:9200/test?pretty"
  4. # 测试分词
  5. curl -X POST "localhost:9200/test/_analyze?pretty" -H 'Content-Type: application/json' -d'
  6. {
  7. "text": "美国阿拉斯加州发生8.0级地震",
  8. "analyzer": "hanlp"
  9. }
  10. '