ElasticSearch

一、安装Elasticsearch

1、安装Elasticsearch

1.1、创建普通用户

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]$ 

1.2、上传压缩包并解压

将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.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

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 

添加如下内容:

* soft nofile 65536
* hard nofile 131072
* soft nproc 4096
* hard nproc 4096

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

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

问题错误信息描述

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

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

错误信息描述:

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

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

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

三、安装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分词器上传并解压到该目录

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

4.重启elasticsearch

5.测试

粗粒度拆分

细粒度拆分

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

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

PUT /school_index
{
  "settings": {
    "index": {
      "analysis.analyzer.default.type": "ik_max_word"
    }
  }
}

五、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

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

七、DSL语言高级查询

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"}
}

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

Filter Context对数据进行过来

POST /es_db/_doc/_search
{
    "query": {
        "bool": {
            "filter": {
                "term": {
                    "age": 25
                }
            }
        }
    }
}

八、文档映射

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根据数据类型,会自动创建映射)

PUT /es_db/_doc/1
{
  "name": "jack",
  "sex": 1,
  "age": 25,
  "book": "es入门",
  "address": "小明"
}

2.4、获取文档映射

GET /es_db/_mapping

3、静态映射

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

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

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

PUT /es_db/_doc/_search
{
  "query": {
    "term": {
      "book":"elasticsearch入门至精通"
    }
  }
}

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

PUT /es_db/_doc/_search
{
  "query": {
    "match": {
      "book":"elasticsearch入门至精通"
    }
  }
}

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

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
      }
    }
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值