当前位置:   article > 正文

ElasticSearch_elasticsearch创建用户

elasticsearch创建用户

一、安装Elasticsearch

1、安装Elasticsearch

1.1、创建普通用户

ES不能使用root用户来启动,必须使用普通用户来安装启动。

创建一个es专门的用户(必须

# 使用root用户在服务器执行以下命令

  1. 先创建组,再创建用户:
  2. 1)创建elasticsearch 用户组
  3. [root@localhost ~]# groupadd elasticsearch
  4. 2) 创建用户es并设置密码
  5. [root@localhost ~]# useradd es
  6. [root@localhost ~]# passwd es
  7. 3) 创建es文件夹
  8. [root@localhost ~]# mkdir -p /usr/local/es
  9. 4) 用户es添加到elasticsearch用户组
  10. [root@localhost ~]# usermod -G elasticsearch es
  11. [root@localhost ~]# chown -R es /usr/local/es/
  12. 5) 设置sudo权限
  13. # 为了让普通用户有更大的操作权限,我们一般都会给普通用户设置sudo权限,方便普通用户的操作
  14. # 三台机器使用root用户执行visudo命令然后为es用户添加权限
  15. [root@localhost ~]# visudo
  16. #在root ALL-(ALL) ALL一行下面
  17. #添加es用户,如下:
  18. es ALL-(ALL) ALL
  19. #添加成功保存后切换到es用户操作
  20. [root@localhost ~]# su es
  21. [es@localhost root]$

1.2、上传压缩包并解压

将es的安装包下载并上传到服务器的、user/local/es路径下,然后进行解压

使用es用户来执行以下操作

  1. #解压Elasticsearch
  2. su es
  3. cd /user/local
  4. tar -zxvf elasticsearch-7.12.0-linux-x86_64.tar.gz -C /usr/local/es

1.3 、修改配置文件

1.3.1、修改elasticsearch.xml文件

进入服务器使用es用户来修改配置文件

  1. mkdir -p /usr/local/es/elasticsearch-7.12.0/log
  2. mkdir -p /usr/local/es/elasticsearch-7.12.0/data
  3. cd /usr/local/es/elasticsearch-7.12.0/config
  4. vi elasticsearch.yml
  5. cluster.name: xiaoming
  6. node.name: node1
  7. path.data: /usr/local/es/elasticsearch-7.12.0/data
  8. path.logs: /usr/local/es/elasticsearch-7.12.0/log
  9. network.host: 0.0.0.0
  10. http.port: 9200
  11. discovery.seed_hosts: [192.168.132.3"]
  12. cluster.initial_master_nodes: ["node1"]
  13. bootstrap.system_call_filter: false
  14. bootstrap.memory_lock: false
  15. http.cors.enable: true
  16. http.cors.allow-origin: "*"

1.3.2、修改jvm.option

修改jvm.option配置文件,调整jvm堆内存大小

  1. cd /usr/local/es/elasticsearch-7.12.0/config/
  2. vi jvm.options
  3. -Xms2g
  4. -Xmx2g

2、修改系统配置,解决启动时候的问题

由于现在使用普通用户来安装es服务,且es服务对服务器的资源要求比较多,包括内存大小,线程数等。

2.1、普通用户打开文件的最大数限制

问题错误信息描述:

max file descriptos [4096] fro elasticsearch process likely too low, increase to at least [65536]

ES因为需要大量的创建索引文件,需要大量的打开系统的文件,所以我们需要解除linux系统当中打开文件最大数目的限制,不然ES启动就会抛错

sudo vi /etc/security/limits.conf 

添加如下内容:

  1. * soft nofile 65536
  2. * hard nofile 131072
  3. * soft nproc 4096
  4. * hard nproc 4096

此文件修改后需要重新登录用户,才会生效

2.2、普通用户启动线程数限制

问题错误信息描述

max number of threads [1024] for user [es] likely too low, increase to at least [4096]

修改普通用户可以创建的最大线程数

原因:无法创建本地线程问题,用户最大可创建线程数太小解决方案:修改90-nproc.conf配置文件。

  1. vi /etc/security/limits.d/20-nproc.conf
  2. 找到如下内容
  3. * soft nproc 1024修改为
  4. * soft nproc 4096

2.3、普通用户调大虚拟内存

错误信息描述:

max virtual memory areas vm.max_map_count [65539] likely too low, increase to at least [262144]

调大系统的虚拟内存

原因:最大虚拟内存太小,每次启动机器都手动执行下

  1. vi /etc/sysctl.conf
  2. 追加如下内容
  3. vm.max_map_count=655360
  4. 保存后,执行:sysctl -p

3.启动ES服务

使用es用户执行以下命令启动es服务

cd /usr/local/es/elasticsearch-7.12.0/bin/

后台启动ES

./elasticsearch -d

启动成功之后在浏览器输入即可看到服务进程

http://192.168.132.3:9200/?pretty

二、客户端kibana安装

1.客户端可以分为图形界面客户端,和代码客户端

2.ES主流客户端Kibana,开放9200端口与图形界面客户端交互

   1).下载kibana放之、usr/local/es目录中

   2).解压文件: tar -zxvf kibana-7.12.0-linux-x86_64.tar.gz

   3).进入/usr/local/es/kibana-7.12.0-linux-x86_64/config目录

   4).使用vi编辑器:vi.kibana.yml

  1. server.port:5601
  2. server.host: "服务器IP"
  3. elasticsearch.hosts: ["http://IP:9200"] #这里是elasticsearch的访问地址

 5).启动kibana

  1. cd /usr/local/es/kibana-7.12.0-linux-x86_64/bin
  2. ./kibana

三、安装IK分词器

1.下载Elasticsearch IK分词器

https://github.com/medcl/elasticsearch-analysis-ik/releases

2.切换到es用户,并在es的安装目录下/plugins创建ik

mkdir -p /usr/local/es/elasticsearch-7.12.0/plugins/ik/

3.将下载的ik分词器上传并解压到该目录

  1. cd /usr/local//es/elasticsearch-7.12.0/plugins/ik
  2. unzip elasticsearch-analysis-ik-7.12.0.zip

4.重启elasticsearch

5.测试

粗粒度拆分

细粒度拆分

四、指定IK分词器作为默认分词器

ES的默认分词设置的是standard,这个在中文分词时就比较尴尬了,会单字拆分。

  1. PUT /school_index
  2. {
  3. "settings": {
  4. "index": {
  5. "analysis.analyzer.default.type": "ik_max_word"
  6. }
  7. }
  8. }

五、ES数据管理

1、ES数据管理概述

ES是面向文档的,这意味着它可以存储整个对象或文档。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。

在ES中,你可以对文档(而非成行成列的数据)进行索引,搜索,排序,过滤。ES使用JSON作为文档序列化格式。

JSON现在已经被大多语言所支持,而且已经成为NoSQL领域的标准格式。

2.基本操作

1) 创建索引

格式: PUT /索引名称

举例:PUT /es_db

2) 查询索引

格式:GET /索引名称

举例: GET /school_index

3)删除索引

格式:DELETE /索引名称

举例:DELETE /school_index

4)添加文档

格式:PUT /索引名称/类型/id

  1. PUT /school_index/_doc/1
  2. {
  3. "name": "张三",
  4. "sex": 1,
  5. "age": 25,
  6. "address": "上海世纪公园"
  7. }

5)修改文档

格式: PUT /索引名称/类型/id

  1. PUT /school_index/_doc/1
  2. {
  3. "name": "张三",
  4. "sex": 1,
  5. "age": 25,
  6. "address": "上海世纪公园"
  7. }

6)查询文档

格式:GET /索引名称/类型/id

GET /school_index/_doc/1

7)删除文档

  1. 格式:DELETE /索引名称/类型/id
  2. 举例:DELETE /es_db/_doc/1

六、查询操作

1、查询当前类型中的所有文档 _search

  1. 格式:GET /索引名称/类型/_search
  2. 举例:GET /es_db/_doc/_search

2、条件查询,如要查询age等于28岁的

  1. 格式:GET /索引名称/类型/_search?q=*:***
  2. 举例:GET /es_db/_doc/_search?q=age:28

3.范围查询,如要查询age在25至26岁之间的

  1. 格式:GET /索引名称/类型/_search?q=***[25 TO 26]
  2. 举例:GET /es_db/_doc/_search?q=age[25 TO 26]

4、根据多个ID进行批量查询_mget

  1. 格式:GET /索引名称/类型/_mget
  2. 举例:GET /es_db/_doc/_mget
  3. {
  4. "ids":["1","2"]
  5. }

5、查询年龄小于等于28的 :<=

  1. 格式:GET /索引名称/类型/_search?q=age:<=**
  2. 举例:GET /es_db/_doc/_search?q=age:<=28

6、查询年龄大于28前的 :>

  1. 格式:GET /索引名称/类型/_search?q=age:>**
  2. 举例:GET /es_db/_doc/_search?q=age:>28

7、分页查询 from=*&size=*

  1. 格式:GET /索引名称/类型/_search?q=age[25 TO 26]&from=0&size=1
  2. 举例:GET /es_db/_doc/_search?q=age[25 TO 26]&from=0&size=1

8、对查询结果只输出某些字段 _source=字段,字段

  1. 格式:GET /索引名称/类型/_search?_source=字段,字段
  2. 举例:GET /es_db/_doc/_search?_source=name,age

9、对查询结果排序 sort=字段:desc/asc

  1. 格式:GET /索引名称/类型/_search?sort=字段:desc
  2. 举例:GET /es_db/_doc/_search?sort=age:desc

七、DSL语言高级查询

ES提供了强大的查询语言(DSL),它可以允许我们进行更加强大、复杂的查询,elasticsearch DSL中有Query与Filter两种

1、Query方式查询,会在ES中索引的数据都会存储在一个_score分值,分值越高就代表越匹配。里外关于某个搜索的分值计算还是很复杂的,因此也需要一定的时间。

1)根据名称精确查询姓名 term,term查询不会对字段进行分词查询,会采用精确匹配

       注意:采用term精确查询,查询字段映射类型属于为keyword

    举例:

  1. POST /es_db/_doc/_search
  2. {
  3. "query": {
  4. "term": {
  5. "name": "admin:
  6. }
  7. }
  8. }

2)根据备注信息模糊查询match,match会根据该字段的分词器,进行分词查询

  1. POST /es_db/_doc/_search
  2. {
  3. "form": 0,
  4. "size": 2,
  5. "query": {
  6. "match": {
  7. "address": "广州"
  8. }
  9. }
  10. }

3)多字段模糊匹配查询与精准查询 multi_match

  1. POST /es_db/_doc/_search
  2. {
  3. "query": {
  4. "multi_match": {
  5. "query": "张三",
  6. "fields":["address","name"]
  7. }
  8. }
  9. }

4)范围查询

注:join请求字符串中部分字段的含义

         range:范围关键字

         gte: 大于等于

         lte:   小于等于

         gt:     大于

         lt: 小于

        now:    当前时间

  1. POST /es_db/_doc/_search
  2. {
  3. "query": {
  4. "range": {
  5. "age": {
  6. "gte": 25,
  7. "lte": 28
  8. }
  9. }
  10. }
  11. }

5)  分页、输出字段、排序综合查询

  1. POST /es_db/_doc/_search
  2. {
  3. "query": {
  4. "range": {
  5. "age": {
  6. "gte": 25,
  7. "lte": 28
  8. }
  9. }
  10. },
  11. "from": 0,
  12. "size": 2,
  13. "_source": ["name","age","book"],
  14. "sort": {"age": "desc"}
  15. }

2、Filter过滤器方式查询,它的查询不会计算相关性分值,也不会对结果进行排序,因此效率会高一点,查询的结果可以被缓存。

Filter Context对数据进行过来

  1. POST /es_db/_doc/_search
  2. {
  3. "query": {
  4. "bool": {
  5. "filter": {
  6. "term": {
  7. "age": 25
  8. }
  9. }
  10. }
  11. }
  12. }

八、文档映射

1.ES中映射可以分为动态映射和静态映射

动态映射:

   在关系数据库中,需要事先创建数据库,然后在该数据库下创建数据表,并创建表字段、类型、长度、主键等,最后才能基于表插入数据。而elasticsearch中不需要定义Mapping映射,在文档写入Elasticsearch时,会根据文档字段自动识别类型,这种机制称之为动态映射。

动态映射规则如下:

JSON数据自动识别的类型
null没有字段被添加
true或falseBoolean类型
小数float类型
数字long类型
日期data或text
字符串text
数组由数组第一个非空值决定
JSON对象object类型

 

 

 

 

 

 

 

 

 

静态映射:

   静态映射是在Elasticsearch中也可以事先定义好映射,包含文档的各字段类型、分词器等,这种方式称之为静态映射。

2、动态映射

2.1、删除原创建的索引

DELETE /es_db

2.2、创建索引

PUT /es_db

2.3、创建文档(ES根据数据类型,会自动创建映射)

  1. PUT /es_db/_doc/1
  2. {
  3. "name": "jack",
  4. "sex": 1,
  5. "age": 25,
  6. "book": "es入门",
  7. "address": "小明"
  8. }

2.4、获取文档映射

GET /es_db/_mapping

3、静态映射

3.1、删除原创建的索引

DELETE /es_db

3.2、创建索引

PUT /es_db

3.3、设置文档映射

  1. PUT /es_db/_doc/1
  2. {
  3. "mappings": {
  4. "properties": {
  5. "name": {
  6. "type": "keyword",
  7. "index": true,
  8. "store": true
  9. },
  10. "sex": {
  11. "type": "integer",
  12. "index": true,
  13. "store": true
  14. },
  15. "age": {
  16. "type": "integer",
  17. "index": true,
  18. "store": true
  19. },
  20. "book": {
  21. "type": "text",
  22. "index": true,
  23. "store": true
  24. },
  25. "address": {
  26. "type": "text",
  27. "index": true,
  28. "store": true
  29. }
  30. }
  31. }
  32. }

3.5、获取文档映射

GET /es_db/_mapping

九、keyword与text映射类型的区别

将book 字段设置为keyword映射(只能精准查询,不能分词查询,能聚合、排序)

  1. PUT /es_db/_doc/_search
  2. {
  3. "query": {
  4. "term": {
  5. "book":"elasticsearch入门至精通"
  6. }
  7. }
  8. }

将book字段设置为text映射(能模糊查询,能分词查询,不能聚合,排序)

  1. PUT /es_db/_doc/_search
  2. {
  3. "query": {
  4. "match": {
  5. "book":"elasticsearch入门至精通"
  6. }
  7. }
  8. }

十、创建静态映射时指定text类型的ik分词器

1.设置IK分词器的文档映射

    

  1. PUT /es_db/_doc/1
  2. {
  3. "mappings": {
  4. "properties": {
  5. "name": {
  6. "type": "keyword",
  7. "index": true,
  8. "store": true
  9. },
  10. "sex": {
  11. "type": "integer",
  12. "index": true,
  13. "store": true
  14. },
  15. "age": {
  16. "type": "integer",
  17. "index": true,
  18. "store": true
  19. },
  20. "book": {
  21. "type": "text",
  22. "index": true,
  23. "store": true,
  24. "analyzer": "ik_smart"
  25. },
  26. "address": {
  27. "type": "text",
  28. "index": true,
  29. "store": true
  30. }
  31. }
  32. }
  33. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/868306
推荐阅读
相关标签
  

闽ICP备14008679号