安装

ES

使用版本7.2.0

  1. rpm相关命令
  2. - 查询已安装的软件包
  3. rpm -q {xxx}
  4. rpm -qa |grep {xxx}
  5. - 安装软件包
  6. rpm -ivh {xxx.rpm}
  7. - 卸载
  8. rpm -e {xxx.rpm}
  9. - 查看软件包的文件列表
  10. rpm -ql {xxx.rpm}
  1. 下载rpm包, 安装 rpm -ivh elasticseachxxx.rpm, 安装的文件夹在/usr/share/elasticsearch

  2. 修改配置, 配置在/etc/elasticseach

    1. 修改jvm.options, Xmx与Xms设置成一样, 不超过机器内存的50%, 不超过30GB
    2. 修改elasticseach.yml, 改http端口
    3. 修改elasticseach.yml, 改data以及log目录, 并需要创建对应目录并给elasticseach用户授权

      path.data: /opt/elasticsearch/data

      path.logs: /opt/elasticsearch/logs

      查询服务看到组和用户都是elasticsearch, cat /usr/lib/systemd/system/elasticsearch.service 因此给文件夹授权, chown -R elasticsearch:elasticsearch /opt/elasticsearch

  1. es7.0以上版本需要JDK11, 由于环境变量为JDK8, 因此修改es配置文件使其指向ES自带的JDK11

参考: https://blog.csdn.net/xiaoxiong_web/article/details/105597150
修改/usr/share/elasticsearch/bin/elasticsearch-env文件, 注释掉红框部分
image.png

  1. 启动systemctl start elasticseach

image.png

IK分词器

  1. 找对应版本, https://github.com/medcl/elasticsearch-analysis-ik
  2. 在/usr/share/elasticsearch下执行

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.2.0/elasticsearch-analysis-ik-7.2.0.zip
image.png

补充: 也可以通过_cat来查看
image.png

Kibana

  1. 下载安装
  2. 修改/etc/kibana/kibana.yml配置文件
    1. server.port: 40008
    2. server.host: '0.0.0.0'
    3. elasticsearch.hosts: ['http://192.168.3.123:40009']

Logstash

  1. 下载安装
  2. 修改配置, 配置在/etc/logstash
    1. 修改jvm.options
    2. 修改logstash.yml, 改data以及log目录, 并需要创建对应目录并给logstash用户授权
    3. 在当前目录下建conf.d文件夹存放配置文件, 且也需要给logstash用户授权

      path.data: /opt/logstash/data

      path.logs: /opt/logstash/logs

      chown -R logstash:logstash /opt/logstash chown -R logstash:logstash /etc/logstash/conf.d

win下启用es集群

  1. 安装docker-desktop, https://docs.docker.com/desktop/windows/install/
  2. 执行命令, 以解决内存不足的

    在Windows下如果是使用Docker Desktop WSL 2 backend后端,需要在命令行里面这样调整。
    wsl -d docker-desktop
    sysctl -w vm.max_map_count=262144

  3. 启动, docker compose up ```bash version: ‘2.2’ services: cerebro: image: lmenezes/cerebro:0.8.3 container_name: cerebro ports:

    • “9000:9000” command: -Dhosts.0.host=http://elasticsearch:9200 networks:
    • es72net kibana: image: docker.elastic.co/kibana/kibana:7.2.0 container_name: kibana72 environment:

      - I18N_LOCALE=zh-CN

    • XPACK_GRAPH_ENABLED=true
    • TIMELION_ENABLED=true
    • XPACK_MONITORING_COLLECTION_ENABLED=”true” ports:
    • “5601:5601” networks:
    • es72net elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0 container_name: es72_01 environment:
    • cluster.name=geektime
    • node.name=es72_01
    • bootstrap.memory_lock=true
    • “ES_JAVA_OPTS=-Xms512m -Xmx512m”
    • discovery.seed_hosts=es72_01,es72_02
    • cluster.initial_master_nodes=es72_01,es72_02 ulimits: memlock: soft: -1 hard: -1 volumes:
    • es72data1:/usr/share/elasticsearch/data ports:
    • 9200:9200 networks:
    • es72net elasticsearch2: image: docker.elastic.co/elasticsearch/elasticsearch:7.2.0 container_name: es72_02 environment:
    • cluster.name=geektime
    • node.name=es72_02
    • bootstrap.memory_lock=true
    • “ES_JAVA_OPTS=-Xms512m -Xmx512m”
    • discovery.seed_hosts=es72_01,es72_02
    • cluster.initial_master_nodes=es72_01,es72_02 ulimits: memlock: soft: -1 hard: -1 volumes:
    • es72data2:/usr/share/elasticsearch/data networks:
    • es72net

volumes: es72data1: driver: local es72data2: driver: local

networks: es72net: driver: bridge

  1. 启用后观察es集群状况: [http://localhost:9200/_cat/health?v](http://localhost:9200/_cat/health?v)<br />kibana: [http://localhost:5601/app/kibana](http://localhost:5601/app/kibana)<br />cerebro: [http://localhost:9000/#/overview?host=http:%2F%2Felasticsearch:9200](http://localhost:9000/#/overview?host=http:%2F%2Felasticsearch:9200)
  2. ---
  3. <a name="qBLBh"></a>
  4. ## 入门
  5. <a name="SWV1g"></a>
  6. ### 基本概念
  7. - 文档(Document), 文档是es中可搜索数据的最小单位
  8. - 文档的元数据
  9. - _index, 文档所属索引
  10. - _type, 文档所属类型
  11. - _id, 文档唯一id
  12. - _source, 文档的原始json数据
  13. - _all, 整合所有字段内容到该字段, 7.0已被废除
  14. - _version, 文档的版本信息
  15. - _score, 相关性打分
  16. - 索引(Index), 索引是文档的容器, 是一类文档的结合
  17. - 索引中的数据分布在分片(shard)上
  18. - 每个索引都有自己的Mapping定义, 用于定义包含的文档的字段名和字段类型
  19. - 索引的setting定义不同的数据分布
  20. 与传统关系型数据库对比
  21. | RDBMS | Elasticsearch |
  22. | --- | --- |
  23. | Table | Index(Type) |
  24. | Row | Document |
  25. | Column | Filed |
  26. | Schema | Mapping |
  27. | SQL | DSL |
  28. - 节点
  29. - 节点就是一个es实例, 本质上是一个java进程
  30. - 每个节点都有名字
  31. - 每个节点启动之后, 会分配一个UID, 保存在data目录下
  32. - Master-eligible nodes & Master Node
  33. - 每个节点启动后, 默认就是一个master eligible节点, 可以设置 node.master:false禁止
  34. - master eligible节点可以参加选主流程, 成为master节点
  35. - 当第一个节点启动时, 会将自己选举为master节点
  36. - 每个节点都保存了集群的状态, 只有master节点才能修改集群的状态信息(所有的节点信息, 所有的索引以及相关的mapping, setting, 分片的路由信息等)
  37. - Data Node & Coordinating Node
  38. - Data Node, 指可以保存数据的节点
  39. - Coordinating Node负责接受Client的请求, 将请求分发到合适的节点, 将结果汇总, 每个节点默认都起到了Coordinating Node的职责
  40. - 其他节点类型
  41. - Hot & Warm Node, 冷热节点, 根据不同硬件配置不同的Data Node, 降低成本
  42. - Machine Learning Node, 负责跑机器学习的Job, 用来做异常检测
  43. - Tribe Node
  44. - 分片(primary shard & replica shard)
  45. - 主分片, 解决水平扩展问题, 通过主分片, 可以将数据分布到集群的所有节点之上
  46. - 一个分片就是一个运行的lucene实例
  47. - 主分片数在索引创建时指定, 后续不允许修改, 除非ReIndex
  48. - 副本, 解决数据高可用问题, 分片是主分片的拷贝
  49. - 副本分片数, 可以动态调整
  50. - 增加副本数, 还可以在一定程度上提高服务的可用性(读取的吞吐)
  51. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/281275/1625493171971-217d7bcf-4ee5-4045-a821-529452ffcc4b.png#clientId=uaf395121-6fa4-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=303&id=uf311b794&margin=%5Bobject%20Object%5D&name=image.png&originHeight=458&originWidth=802&originalType=binary&ratio=1&rotation=0&showTitle=false&size=80564&status=done&style=none&taskId=u4289d516-f6e4-4f5c-b84f-1a9bd8ad8e3&title=&width=530)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/281275/1625493220842-7dec921e-8aaa-445a-9ba9-690929b86593.png#clientId=uaf395121-6fa4-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=288&id=u601edd69&margin=%5Bobject%20Object%5D&name=image.png&originHeight=472&originWidth=879&originalType=binary&ratio=1&rotation=0&showTitle=false&size=172007&status=done&style=none&taskId=ude80d15a-1bf3-457a-806d-45b1a1fa8f0&title=&width=536)
  52. <a name="m0NF0"></a>
  53. ### 文档的CRUD与批量操作
  54. ```json
  55. 基本格式为 {请求方式} {索引}/_doc/{文档id}
  56. - 索引, 先删掉旧的再添加新的, 版本号+1
  57. PUT test_index/_doc/1
  58. {"user":"haha","comment":"this is a test!"}
  59. - 新增, 指定id时, 重复操作会报错
  60. PUT test_index/_create/1
  61. {"user":"haha","comment":"this is a test!"}
  62. POST test_index/_doc
  63. {"user":"haha","comment":"this is a test!"}
  64. - 查询
  65. GET test_index/_doc/1
  66. - 修改
  67. POST test_index/_update/1
  68. {"user":"haha","comment":"this is a test!"}
  69. - 删除
  70. DELETE test_index/_doc/1
  71. ---------------------------------------------------------------
  72. Bulk API 支持在一次API调用中, 对不同索引进行操作, 略
  73. 批量获取mget
  74. 批量查询msearch

常见错误返回
image.png

倒排索引

image.png

分词

image.png

  1. _analyzer API
  2. - 直接指定analyzer进行测试
  3. GET /_analyze
  4. {
  5. "analyzer":"standard",
  6. "test":"this is a test!"
  7. }
  8. - 指定索引的字段进行测试
  9. POST test_index/_analyze
  10. {
  11. "filed":"title",
  12. "text":"Mastering Elasticsearch"
  13. }
  14. - 自定义分词器进行测试
  15. POST /_analyze
  16. {
  17. "tokenizer":"standard",
  18. "filter":["lowercase"],
  19. "text::"Mastering Elasticsearch"
  20. }