赞
踩
ES不能使用root用户来启动,必须使用普通用户来安装启动。
创建一个es专门的用户(必须)
# 使用root用户在服务器执行以下命令
- 先创建组,再创建用户:
- 1)创建elasticsearch 用户组
- [root@localhost ~]# groupadd elasticsearch
-
- 2) 创建用户es并设置密码
- [root@localhost ~]# useradd es
- [root@localhost ~]# passwd es
-
- 3) 创建es文件夹
- [root@localhost ~]# mkdir -p /usr/local/es
-
- 4) 用户es添加到elasticsearch用户组
- [root@localhost ~]# usermod -G elasticsearch es
- [root@localhost ~]# chown -R es /usr/local/es/
-
- 5) 设置sudo权限
- # 为了让普通用户有更大的操作权限,我们一般都会给普通用户设置sudo权限,方便普通用户的操作
- # 三台机器使用root用户执行visudo命令然后为es用户添加权限
- [root@localhost ~]# visudo
-
- #在root ALL-(ALL) ALL一行下面
- #添加es用户,如下:
- es ALL-(ALL) ALL
-
- #添加成功保存后切换到es用户操作
- [root@localhost ~]# su es
- [es@localhost root]$
将es的安装包下载并上传到服务器的、user/local/es路径下,然后进行解压
使用es用户来执行以下操作
- #解压Elasticsearch
- su es
- cd /user/local
- tar -zxvf elasticsearch-7.12.0-linux-x86_64.tar.gz -C /usr/local/es
1.3.1、修改elasticsearch.xml文件
进入服务器使用es用户来修改配置文件
- mkdir -p /usr/local/es/elasticsearch-7.12.0/log
- mkdir -p /usr/local/es/elasticsearch-7.12.0/data
-
-
- cd /usr/local/es/elasticsearch-7.12.0/config
- vi elasticsearch.yml
-
- cluster.name: xiaoming
- node.name: node1
- path.data: /usr/local/es/elasticsearch-7.12.0/data
- path.logs: /usr/local/es/elasticsearch-7.12.0/log
- network.host: 0.0.0.0
- http.port: 9200
- discovery.seed_hosts: [192.168.132.3"]
- cluster.initial_master_nodes: ["node1"]
- bootstrap.system_call_filter: false
- bootstrap.memory_lock: false
- http.cors.enable: true
- http.cors.allow-origin: "*"
1.3.2、修改jvm.option
修改jvm.option配置文件,调整jvm堆内存大小
- cd /usr/local/es/elasticsearch-7.12.0/config/
- vi jvm.options
- -Xms2g
- -Xmx2g
由于现在使用普通用户来安装es服务,且es服务对服务器的资源要求比较多,包括内存大小,线程数等。
问题错误信息描述:
max file descriptos [4096] fro elasticsearch process likely too low, increase to at least [65536]
ES因为需要大量的创建索引文件,需要大量的打开系统的文件,所以我们需要解除linux系统当中打开文件最大数目的限制,不然ES启动就会抛错
sudo vi /etc/security/limits.conf
添加如下内容:
- * soft nofile 65536
- * hard nofile 131072
- * soft nproc 4096
- * hard nproc 4096
此文件修改后需要重新登录用户,才会生效
问题错误信息描述
max number of threads [1024] for user [es] likely too low, increase to at least [4096]
修改普通用户可以创建的最大线程数
原因:无法创建本地线程问题,用户最大可创建线程数太小解决方案:修改90-nproc.conf配置文件。
- vi /etc/security/limits.d/20-nproc.conf
-
- 找到如下内容
- * soft nproc 1024修改为
- * soft nproc 4096
错误信息描述:
max virtual memory areas vm.max_map_count [65539] likely too low, increase to at least [262144]
调大系统的虚拟内存
原因:最大虚拟内存太小,每次启动机器都手动执行下
- vi /etc/sysctl.conf
- 追加如下内容
- vm.max_map_count=655360
- 保存后,执行:sysctl -p
使用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
- server.port:5601
- server.host: "服务器IP"
- elasticsearch.hosts: ["http://IP:9200"] #这里是elasticsearch的访问地址
5).启动kibana
- cd /usr/local/es/kibana-7.12.0-linux-x86_64/bin
-
- ./kibana
https://github.com/medcl/elasticsearch-analysis-ik/releases
mkdir -p /usr/local/es/elasticsearch-7.12.0/plugins/ik/
- cd /usr/local//es/elasticsearch-7.12.0/plugins/ik
- unzip elasticsearch-analysis-ik-7.12.0.zip
粗粒度拆分
细粒度拆分
ES的默认分词设置的是standard,这个在中文分词时就比较尴尬了,会单字拆分。
- PUT /school_index
- {
- "settings": {
- "index": {
- "analysis.analyzer.default.type": "ik_max_word"
- }
- }
- }
ES是面向文档的,这意味着它可以存储整个对象或文档。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。
在ES中,你可以对文档(而非成行成列的数据)进行索引,搜索,排序,过滤。ES使用JSON作为文档序列化格式。
JSON现在已经被大多语言所支持,而且已经成为NoSQL领域的标准格式。
1) 创建索引
格式: PUT /索引名称
举例:PUT /es_db
2) 查询索引
格式:GET /索引名称
举例: GET /school_index
3)删除索引
格式:DELETE /索引名称
举例:DELETE /school_index
4)添加文档
格式:PUT /索引名称/类型/id
- PUT /school_index/_doc/1
- {
- "name": "张三",
- "sex": 1,
- "age": 25,
- "address": "上海世纪公园"
- }
5)修改文档
格式: PUT /索引名称/类型/id
- PUT /school_index/_doc/1
- {
- "name": "张三",
- "sex": 1,
- "age": 25,
- "address": "上海世纪公园"
- }
6)查询文档
格式:GET /索引名称/类型/id
GET /school_index/_doc/1
7)删除文档
- 格式:DELETE /索引名称/类型/id
- 举例:DELETE /es_db/_doc/1
1、查询当前类型中的所有文档 _search
- 格式:GET /索引名称/类型/_search
- 举例:GET /es_db/_doc/_search
2、条件查询,如要查询age等于28岁的
- 格式:GET /索引名称/类型/_search?q=*:***
- 举例:GET /es_db/_doc/_search?q=age:28
3.范围查询,如要查询age在25至26岁之间的
- 格式:GET /索引名称/类型/_search?q=***[25 TO 26]
- 举例:GET /es_db/_doc/_search?q=age[25 TO 26]
4、根据多个ID进行批量查询_mget
- 格式:GET /索引名称/类型/_mget
- 举例:GET /es_db/_doc/_mget
- {
- "ids":["1","2"]
- }
5、查询年龄小于等于28的 :<=
- 格式:GET /索引名称/类型/_search?q=age:<=**
- 举例:GET /es_db/_doc/_search?q=age:<=28
6、查询年龄大于28前的 :>
- 格式:GET /索引名称/类型/_search?q=age:>**
- 举例:GET /es_db/_doc/_search?q=age:>28
7、分页查询 from=*&size=*
- 格式:GET /索引名称/类型/_search?q=age[25 TO 26]&from=0&size=1
- 举例:GET /es_db/_doc/_search?q=age[25 TO 26]&from=0&size=1
8、对查询结果只输出某些字段 _source=字段,字段
- 格式:GET /索引名称/类型/_search?_source=字段,字段
- 举例:GET /es_db/_doc/_search?_source=name,age
9、对查询结果排序 sort=字段:desc/asc
- 格式:GET /索引名称/类型/_search?sort=字段:desc
- 举例:GET /es_db/_doc/_search?sort=age:desc
ES提供了强大的查询语言(DSL),它可以允许我们进行更加强大、复杂的查询,elasticsearch DSL中有Query与Filter两种
1、Query方式查询,会在ES中索引的数据都会存储在一个_score分值,分值越高就代表越匹配。里外关于某个搜索的分值计算还是很复杂的,因此也需要一定的时间。
1)根据名称精确查询姓名 term,term查询不会对字段进行分词查询,会采用精确匹配
注意:采用term精确查询,查询字段映射类型属于为keyword
举例:
- POST /es_db/_doc/_search
- {
- "query": {
- "term": {
- "name": "admin:
- }
- }
- }
2)根据备注信息模糊查询match,match会根据该字段的分词器,进行分词查询
- POST /es_db/_doc/_search
- {
- "form": 0,
- "size": 2,
- "query": {
- "match": {
- "address": "广州"
- }
- }
-
- }
3)多字段模糊匹配查询与精准查询 multi_match
- POST /es_db/_doc/_search
- {
- "query": {
- "multi_match": {
- "query": "张三",
- "fields":["address","name"]
- }
- }
- }
4)范围查询
注:join请求字符串中部分字段的含义
range:范围关键字
gte: 大于等于
lte: 小于等于
gt: 大于
lt: 小于
now: 当前时间
- POST /es_db/_doc/_search
-
- {
- "query": {
- "range": {
- "age": {
- "gte": 25,
- "lte": 28
- }
- }
- }
- }
5) 分页、输出字段、排序综合查询
- POST /es_db/_doc/_search
- {
- "query": {
- "range": {
- "age": {
- "gte": 25,
- "lte": 28
- }
- }
- },
- "from": 0,
- "size": 2,
- "_source": ["name","age","book"],
- "sort": {"age": "desc"}
- }
Filter Context对数据进行过来
- POST /es_db/_doc/_search
- {
- "query": {
- "bool": {
- "filter": {
- "term": {
- "age": 25
- }
- }
- }
- }
- }
在关系数据库中,需要事先创建数据库,然后在该数据库下创建数据表,并创建表字段、类型、长度、主键等,最后才能基于表插入数据。而elasticsearch中不需要定义Mapping映射,在文档写入Elasticsearch时,会根据文档字段自动识别类型,这种机制称之为动态映射。
动态映射规则如下:
JSON数据 | 自动识别的类型 |
---|---|
null | 没有字段被添加 |
true或false | Boolean类型 |
小数 | float类型 |
数字 | long类型 |
日期 | data或text |
字符串 | text |
数组 | 由数组第一个非空值决定 |
JSON对象 | object类型 |
静态映射是在Elasticsearch中也可以事先定义好映射,包含文档的各字段类型、分词器等,这种方式称之为静态映射。
2.1、删除原创建的索引
DELETE /es_db
2.2、创建索引
PUT /es_db
2.3、创建文档(ES根据数据类型,会自动创建映射)
- PUT /es_db/_doc/1
- {
- "name": "jack",
- "sex": 1,
- "age": 25,
- "book": "es入门",
- "address": "小明"
- }
2.4、获取文档映射
GET /es_db/_mapping
3.1、删除原创建的索引
DELETE /es_db
3.2、创建索引
PUT /es_db
3.3、设置文档映射
- PUT /es_db/_doc/1
- {
- "mappings": {
- "properties": {
- "name": {
- "type": "keyword",
- "index": true,
- "store": true
- },
- "sex": {
- "type": "integer",
- "index": true,
- "store": true
- },
- "age": {
- "type": "integer",
- "index": true,
- "store": true
- },
- "book": {
- "type": "text",
- "index": true,
- "store": true
- },
- "address": {
- "type": "text",
- "index": true,
- "store": true
- }
- }
- }
- }
3.5、获取文档映射
GET /es_db/_mapping
将book 字段设置为keyword映射(只能精准查询,不能分词查询,能聚合、排序)
- PUT /es_db/_doc/_search
- {
- "query": {
- "term": {
- "book":"elasticsearch入门至精通"
- }
- }
- }
将book字段设置为text映射(能模糊查询,能分词查询,不能聚合,排序)
- PUT /es_db/_doc/_search
- {
- "query": {
- "match": {
- "book":"elasticsearch入门至精通"
- }
- }
- }
1.设置IK分词器的文档映射
- PUT /es_db/_doc/1
- {
- "mappings": {
- "properties": {
- "name": {
- "type": "keyword",
- "index": true,
- "store": true
- },
- "sex": {
- "type": "integer",
- "index": true,
- "store": true
- },
- "age": {
- "type": "integer",
- "index": true,
- "store": true
- },
- "book": {
- "type": "text",
- "index": true,
- "store": true,
- "analyzer": "ik_smart"
- },
- "address": {
- "type": "text",
- "index": true,
- "store": true
- }
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。