• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

ElasticSearch全文检索(1)

武飞扬头像
cruisChen
帮助1

一、ElasticSearch介绍

1、什么是ElasticSearch?
	ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个基于RESTfulweb接口的分布式全文搜索引擎
    简单来说就是基于lucene的全文检索服务器,对外提供restful接口

学习之前我们要清楚一件事,有些公司会使用solr,这个时候es和solr我们选择哪一个?

①如果你公司现在用的solr可以满足需求就不要换了。

②如果你公司准备进行全文检索项目的开发,建议优先考虑elasticsearch,因为像Github这样大规模的搜索都在用它。

2.ElasticSearch的索引结构
ElasticSearch有两种索引
①正排索引,为了方便理解直接上图
学新通
正排索引:原始文档传入数据到index索引库后–>documents文档–>分词列表(分词列表中的内容)
我们也可以用字典去理解–正排索引:查字典从第一页开始找,直到找到位置(文档----->关键字)

②倒排索引,直接上图
学新通
倒排索引:原始文档传入数据到index索引库后—>关键字(分词列表中的内容)—>documents文档
也可以通过字典去理解–倒排索引:查字典时通过目录查询(关键字---->文档)
倒排索引由三部分组成组成(进阶):
1、将搜索的文档最终以Document方式存储起来。

2、将要搜索的文档内容分词,所有不重复的词组成分词列表。

3、每个分词和docment都有关联

我们需要明白分词列表的特点:①不重复 ②“的 得 地”语气词不参加分词 ③搜索的field不参加分词

👆上面我们介绍完了Elasticsearch和他的索引结构,那么我们要如何使用呢?

推荐使用Elasticsearch因为他提供 RESTful Api接口进行索引、搜索,并且支持多种客户端。

学新通

二,ElasticSearch的安装

安装之前环境需求

1、jdk必须是jdk1.8.0_131以上版本。

2、ElasticSearch 需要至少4096 的线程池和 262144字节以上空间的虚拟内存才能正常启动,所以需要为虚拟机分配至少1.5G以上的内存

3、从5.0开始,ElasticSearch 安全级别提高了,不允许采用root帐号启动

4、Elasticsearch的插件要求至少centos的内核要3.5以上版本

下载

ElasticSearch官网:https://www.elastic.co/cn/
下载好后使用xftp等一类软件放入虚拟机/usr/upload的文件夹中

设置虚拟机内存

学新通

创建用户

从5.0开始,ElasticSearch 安全级别提高了,不允许采用root帐号启动,所以我们要添加一个用户。
1.创建elk 用户组

 groupadd elk

2.创建用户admin

useradd admin
passwd admin

3.将admin用户添加到elk组

usermod -G elk admin

5.为用户分配权限

#chown将指定文件的拥有者改为指定的用户或组 -R处理指定目录以及其子目录下的所有文件
chown -R admin:elk /usr/upload
chown -R admin:elk /usr/local

切换用户:

su admin
安装
tar -zxvf elasticsearch-6.2.3.tar.gz -C /usr/local
解压好后有一个ES文件夹,里面的目录结构有以下几个

bin 目录:可执行文件包
config 目录:配置相关目录
lib 目录:ES 需要依赖的 jar 包,ES 自开发的 jar 包
logs 目录:日志文件相关目录
modules 目录:功能模块的存放目录,如aggs、reindex、geoip、xpack、eval
plugins 目录:插件目录包,三方插件或自主开发插件
data 目录:在 ES 启动后,会自动创建的目录,内部保存 ES 运行过程中需要保存的数据。

配置文件

ES安装目录config中配置文件如下:

elasticsearch.yml:用于配置Elasticsearch运行参数

jvm.options:用于配置Elasticsearch JVM设置

log4j2.properties:用于配置Elasticsearch日志

elasticsearch.yml

根据项目修改配置文件
cluster.name:
配置elasticsearch的集群名称,默认是elasticsearch。建议修改成一个有意义的名称。
node.name:
节点名,通常一台物理服务器就是一个节点,es会默认随机指定一个名字,建议指定一个有意义的名称,方便管理一个或多个节点组成一个cluster集群,集群是一个逻辑的概念,节点是物理概念,后边章节会详细介绍。
path.data:
设置索引数据的存储路径,默认是es_home下的data文件夹,可以设置多个存储路径,用逗号隔开。
path.logs:
设置日志文件的存储路径,默认是es_home下的logs文件夹
network.host:
设置绑定主机的ip地址,设置为0.0.0.0表示绑定任何ip,允许外网访问,生产环境建议设置为具体的ip。
http.port: 9200
设置对外服务的http端口,默认为9200。
transport.tcp.port: 9300
集群结点之间通信端口
discovery.zen.ping.unicast.hosts:[“host1:port”, “host2:port”, “…”]
设置集群中master节点的初始列表。
discovery.zen.ping.timeout: 3s
设置ES自动发现节点连接超时的时间,默认为3秒,如果网络延迟高可设置大些。
http.cors.enabled:
是否支持跨域,默认为false
http.cors.allow-origin:
当设置允许跨域,默认为*,表示支持所有域名
—>以下为示例<—

cluster.name:llek_op
node.name: llek_op_node_1
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["0.0.0.0:9300", "0.0.0.0:9301"]
path.data: /usr/local/elasticsearch-6.2.3/data
path.logs: /usr/local/elasticsearch-6.2.3/logs
http.cors.enabled: true
http.cors.allow-origin: /.*/	   
jvm.options

设置最小及最大的JVM堆内存大小:

在jvm.options中设置 -Xms和-Xmx:

1) 两个值设置为相等

2) 将Xmx 设置为不超过物理内存的一半。

默认内存占用太多了,我们调小一些:

-Xms512m
-Xmx512m
log4j2.properties

日志文件设置,ES使用log4j,注意日志级别的配置,一般无特殊需求无需更改。

启动ES

启动和关闭

1、启动

./elasticsearch   --》一般使用这个就行,简单不易出错
#或
./elasticsearch -d            

启动成功后如下👇
学新通

2、关闭

查看状态 ps-ef|grep elasticsearch

kill -9 pid

第一次使用时会出现以下问题,可以根据索引一步一步解决

使用前我们可以通过命令来查看内核版本 uname -srm,如果出现内核问题可以看下面这个步骤
–>解决内核问题

学新通

示例中使用的是centos6,其linux内核版本为2.6。而Elasticsearch的插件要求至少3.5以上版本。禁用这个插件即可。

修改elasticsearch.yml文件,在最下面添加如下配置

bootstrap.system_call_filter: false
解决文件创建权限问题
[1]: max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]

Linux 默认来说,一般限制应用最多创建的文件是 4096个。但是 ES 至少需要 65536 的文件创建权限。我们用的是admin用户,而不是root,所以文件权限不足。

使用root用户修改配置文件:

vim /etc/security/limits.conf

追加下面的内容:

* soft nofile 65536
* hard nofile 65536
解决线程开启限制问题
[2]: max number of threads [1024] for user [admin] is too low, increase to at least [4096]

默认的 Linux 限制 root 用户开启的进程可以开启任意数量的线程,其他用户开启的进程可以开启1024 个线程。必须修改限制数为4096 。因为 ES 至少需要 4096 的线程池预备。

如果虚拟机的内存是 1G,最多只能开启 3000 个线程数。至少为虚拟机分配 1.5G 以上的内存。

使用root用户修改配置:

vim /etc/security/limits.d/90-nproc.conf

修改下面的内容:

* soft nproc 1024

改为:

* soft nproc 4096
解决虚拟内存问题
[3]: max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

ES 需要开辟一个 262144字节以上空间的虚拟内存。Linux 默认不允许任何用户和应用直接开辟虚拟内存。

vim /etc/sysctl.conf

追加下面内容:

vm.max_map_count=655360 #限制一个进程可以拥有的VMA(虚拟内存区域)的数量

然后执行命令,让sysctl.conf配置生效:

sysctl -p

安装Kibana

什么是Kibana

Kibana是ES提供的一个基于Node.js的管理控制台, 可以很容易实现高级的数据分析和可视化,以图标的形式展现出来。

kibana可以用来编辑请求语句的,方便学习操作es的语法。有时在进行编写程序,写到查询语句时,往往我会使用kibana进行书写,然后再粘贴到程序中。(不容易出错)

下载

ElasticSearch官网:https://www.elastic.co/cn/

安装

在window中安装Kibana很方便,解压即安装

修改配置

修改config/kibana.yml配置:

server.port: 5601
server.host: "0.0.0.0" #允许来自远程用户的连接
elasticsearch.url: http://192.168.204.132:9200 #Elasticsearch实例的URL 
启动

./bin/kibana
学新通

测试

浏览器访问:http://127.0.0.1:5601
学新通
使用时点击Dev Tools 开始使用即可
学新通

4.安装head

4.1.什么是head

head插件是ES的一个可视化管理插件,用来监视ES的状态,并通过head客户端和ES服务进行交互,比如创建映射、创建索引等。从ES6.0开始,head插件支持使得node.js运行。

4.2.安装

1、下载head

下载地址:https://github.com/mobz/elasticsearch-head

2、运行

npm run start

学新通

4.3.测试

浏览器访问:http://127.0.0.1:9100/

学新通
注意使用时,把红框内地址修改成你修改后的地址,否则无法连接
学新通

链接成功后如下
学新通

ES快速入门

ES作为一个索引及搜索服务,对外提供丰富的REST接口,快速入门部分的实例使用kibana来测试,目的是对ES的使用方法及流程有个初步的认识。

1、index管理

1)创建index
        PUT /javayes
        {
            "settings":{
                "number_of_shards":2 #主分片的数量,提高处理能力
                "number_of_replicas":0 #备份分配的数量,提高可用性
            }
        }
        注意:一台服务器时,备份分配的数量必须设置为0,因为主备在同一台服务器上没有意义

学新通

2)修改index
        PUT /javayes/_setting
        {
            "number_of_replicas":0
        }
        注意:index一旦创建,主分片数量不可修改,因为:GET时--->hash(id)%number_of_shards
    ##### 3)删除index
        DELETE /java2203

学新通

2、mapping管理

1)创建mapping
 POST /javayes/course/_mapping
        {
            "properties":{
                "name":{
                    "type":"text"
                }
            }
        }

学新通

3、document管理
    1)新增document
        POST /javayes/course/1
        {
          "name":".net从入门到放弃",
          "description":".net程序员谁都不服",
          "studymodel":"201003"
        }
2)修改document
        put /javayes/course/1
        {
          "name":"php从入门到放弃",
          "description":"php程序员谁都不服",
          "studymodel":"201003"
        }

学新通

3)查询document
        GET /javayes/course/1

学新通

4)删除document
        DELETE /javayes/course/1

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggfjcj
系列文章
更多 icon
同类精品
更多 icon
继续加载