02.全文搜索ES

02.全文搜索ES

全文搜索

1.介绍

elasticsearch 6 (和elasticsearch 5 的区别在于,root用户权限、一个库只能建立一个表)

elasticsearch 6一个索引只能建立一张表

1.1 文本搜索引擎:

  • 优点:搜索快;
  • 缺点:占用空间。【典型的空间换时间的一种算法】

同类产品:Solr、ElasticSearch、Hermes(腾讯)(实时检索分析)

solr 、elasticSearch 底层依赖Lucene; elasticsearch 默认就是以集群方式工作的。solr需要依赖zk1.

1.2 elasticSearch(搜索引擎)的算法

倒排索引(在内容上建立索引,用内容匹配索引);

btree mysql数据库的索引方式。

b+tree 多路平衡书的晋级(elasticsearch)

内存结构:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html B+Tree

2.elasticsearch 单机安装

2.1 Centos7 +jdk 安装

  • 查看当前Linux系统是否已经安装java : 输入 rpm -qa | grep java
  • 卸载两个openJDK: 输入rpm -e –nodeps 要卸载的软件
  • 上传jdk到linux
  • 解压jdk到/usr/local下 tar –xvf jdk-7u71-linux-i586.tar.gz –C /usr/local
  • 配置jdk环境变量,打开/etc/profile配置文件,将下面配置拷贝进去
#set java environment
JAVA_HOME=/usr/local/jdk1.8.0_152
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
  • 重新加载/etc/profile配置文件 source /etc/profile

2.2 安装elasticsearch

2.2.1 创建目录、上传、解压

  • mkdir -p /opt/es //把安装包上传到 /opt/es目录下
  • tar – zxvf elasticsearch-6.3.1.tar.gz
  • 启动脚本 : ./elasticsearch 直接启动会报相关的错误

02.全文搜索ES

2.2.2 修改相关配置

  • 权限问题: 需要改成其他非root用户才能启动:(1)创建用户: adduser es (2)切换用户: su es

02.全文搜索ES

  • JVM内存问题

02.全文搜索ES

需要修改/opt/es/elasticsearch-6.3.1/config/jvm.options jvm.options jvm配置文件

02.全文搜索ES

需要用root用户授权: chmod 777 -R elasticsearch-6.3.1

02.全文搜索ES

切换 到es用户上。去修改:

02.全文搜索ES

02.全文搜索ES

建议配置2g~4g,学习测试环境配置256m 就可以了

  • elasticSearch.yml中配置es的host地址(配成本机地址,允许访问) elasticSearch.yml 集群配置文件

02.全文搜索ES

02.全文搜索ES

使用非root账户启动elasticsearch : ./elasticsearch 会报 默认线程数、最大文件数、最大内存数都不够

02.全文搜索ES

  • 修改linux的limits配置文件,设置内存线程和最大文件数 。切换root用户 修改vi /etc/security/limits.conf

02.全文搜索ES

02.全文搜索ES

  • 修改linux的sysctl配置文件,配置系统使用内存

02.全文搜索ES

vi sysctl.conf

02.全文搜索ES

02.全文搜索ES

切换es用户启动elasticsearch

./elasticsearch 前台启动

nohup ./elasticsearch & 收集日志,并且有点像后台启动

elasticSearch.yml es的启动host地址
jvm.options配置es的虚拟机内存
limits.conf配置linux的线程内存和文件
sysctl.conf配置系统允许的软件运行内存
systemctl stop firewalld.service            #停止firewall
systemctl disable firewalld.service        #禁止firewall开机启动

# 开启80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
命令含义
--zone #作用域
--add-port=80/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效,没有此参数重启后失效

CentOS 7.0默认使用的是firewall作为防火墙,使用iptables必须重新设置一下
直接关闭防火墙
systemctl stop firewalld.service          #停止firewall
systemctl disable firewalld.service    #禁止firewall开机启动

设置 iptables service
yum -y install iptables-services
如果要修改防火墙配置,如增加防火墙端口3306
vi /etc/sysconfig/iptables 
增加规则
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
保存退出后
systemctl restart iptables.service #重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动

3.kibana安装

3.1 上传安装包并解压

tar -zxvf kibana-6.3.1-linux-x86_64.tar.gz

3.2 修改配置文件

02.全文搜索ES

修改kibana.yml

02.全文搜索ES

3.3 启动

02.全文搜索ES

nohup & 这个命令可以记录启动日志。nohup.out,使用tail -f nohup.out命令实时监控日志记录

ps -ef |grep node 查看kibana 的pid

02.全文搜索ES

使用kill -9 30300 杀死进程

3.ElasticSearch

3.1 交互方式

==交互方式:==基于http协议,以JSON为数据交互格式的RESTfull API 为交互形式

02.全文搜索ES

elasticsearch 通过192.168.1.6:9200/_search 表示查询全部,这里没有查询某个库

GET /_search							#查询所有索引文档
GET /my_index/_search					#查询指定索引文档
GET /my_index1,my_index2/_search		#多索引查询

192.168.1.6/_cat/indices?/v

02.全文搜索ES

这个是因为我先装了kibana,如果装好了es,直接运行不是这个了。直接是标题栏一行的。

标题 描述
health green(集群完整) yellow(单点正常、集群不完整) red(单点不正常)
status 是否能使用
index 索引名
uuid 索引统一编号
pri 主节点几个
rep 从节点几个
docs.count 文档数
docs.deleted 文档被删了多少
store.size 整体占空间大小
pri.store.size 主节点占

3.2 基本概念

Index 库

Type 表

Document 行(一条数据)

Field 字段

标题 描述
cluster 整个elasticsearch 默认就是集群状态,整个集群是一份完整、互备的数据。
node 集群中的一个节点,一般只一个进程就是一个node
shard 分片,即使是一个节点中的数据也会通过hash算法,分成多个片存放,默认是5片。
index 相当于rdbms的database, 对于用户来说是一个逻辑数据库,虽然物理上会被分多个shard存放,也可能存放在多个node中。
type 类似于rdbms的table,但是与其说像table,其实更像面向对象中的class , 同一Json的格式的数据集合。
Document(json) 类似于rdbms的 row、面向对象里的object
field 相当于字段、属性

3.3 简单es 的CRUD

3.3.1 创建索引

02.全文搜索ES

PUT atguigu 表示创建索引

DELETE atguigu 表示删除索引

GET 查询

POST 修改

3.3.2 创建索引并添加数据

格式:PUT /index/type/id

PUT /movie_index/movie/1 创建movie_index索引库,在该库下面创建movie表

PUT /movie_index/movie/1
{ "id":1,
  "name":"operation red sea",
  "doubanScore":8.5,
  "actorList":[  
        {"id":1,"name":"zhang yi"},
        {"id":2,"name":"hai qing"},
        {"id":3,"name":"zhang han yu"}
    ]
}
PUT /movie_index/movie/2
{
  "id":2,
  "name":"operation meigong river",
  "doubanScore":8.0,
  "actorList":[  
         {"id":3,"name":"zhang han yu"}
       ]
}

PUT /movie_index/movie/3
{
  "id":3,
  "name":"incident red sea",
  "doubanScore":5.0,
  "actorList":[  
        {"id":4,"name":"zhang chen"}
       ]
}

如果之前没建过index或者type,es 会自动创建

3.3.3 查询所有

/*查询所有*/
GET /movie_index/_search   
{

"took": 6,
"timed_out": false,
"_shards": {

"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {

"total": 3,
"max_score": 1,
"hits": [
{

"_index": "movie_index",
"_type": "movie",
"_id": "2",
"_score": 1,
"_source": {

"id": 2,
"name": "operation meigong river",
"doubanScore": 8,
"actorList": [
{

"id": 3,
"name": "zhang han yu"
}
]
}
},
{

"_index": "movie_index",
"_type": "movie",
"_id": "1",
"_score": 1,
"_source": {

"id": 1,
"name": "operation red sea",
"doubanScore": 8.5,
"actorList": [
{

"id": 1,
"name": "zhang yi"
},
{

"id": 2,
"name": "hai qing"
},
{

"id": 3,
"name": "zhang han yu"
}
]
}
},
{

"_index": "movie_index",
"_type": "movie",
"_id": "3",
"_score": 1,
"_source": {

"id": 3,
"name": "incident red sea",
"doubanScore": 5,
"actorList": [
{

"id": 4,
"name": "zhang chen"
}
]
}
}
]
}
}

3.3.4 查询条件

02.全文搜索ES

匹配带“red”

GET /movie_index/movie/_search
{

"query": {

"match": {

"name": "red"
}
}
}

3.4 中文分词器IK

3.4.1 进入plugins目录

02.全文搜索ES


配置阿里的镜像
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
记得备份:CentOS-Base.repo文件.
更新镜像源
清除缓存:yum clean all
生成缓存:yum makecache

02.全文搜索ES

重启elasticsearch

02.全文搜索ES

analyzer:

  • ik_smart(简易分词)
  • ik_max_word(尽最大可能分词)
GET _analyze
{
"analyzer":"ik_smart",
"text":"我是中国人"
}

02.全文搜索ES

3.5 相关性算分数

查询的关键字在进行分词处理后,与es的文档(分词处理并建立了索引)之间的相关度的高低

4.ES集群

4.1 节点、分片、索引

  • ==节点:==一个节点就是一个es的服务器,es集群中,主节点负责集群的管理和任务的分发,一般不负责文档的增删改查
  • ==片:==分片是es的实际物理存储单元(一个lucene的实例)
  • ==索引:==是es的逻辑单元,一个索引一般建立在多个不同机器的分片上
  • ==复制片:==每个机器的分片一般在其他机器上会有两到三个复制片(目的是提高数据的容错率)
  • ==容错:==一旦集群中的某些机器发生故障,那么剩余的机器会在主机点的管理下,重新分配资源(分片)
  • ==分片的路由:==写操作(新建、删除)只在主分片上进行,然后将结果同步给复制分片,Sync 主分片同步给复制成功后,才返回结果给客户端,Async 主分片在操作成功后,在同步复制分片的同时返回成功结果给客户端,读操作(查询)可以在主分片或者复制分片上进行

4.2集群

4.2.1 修改配置文件

elasticserach.yml vim /elasticsearch.yml

cluster.name: aubin-cluster     #必须相同 
# 集群名称(不能重复)
# 节点名称,仅仅是描述名称,用于在日志中区分(自定义)
node.name: els1(必须不同)
#指定了该节点可能成为 master 节点,还可以是数据节点
node.master: true
node.data: true
# 数据的默认存放路径(自定义)
path.data: /opt/data
# 日志的默认存放路径 
path.logs: /opt/logs 
# 当前节点的IP地址 
network.host: 192.168.1.7
# 对外提供服务的端口
http.port: 9200 
#9300为集群服务的端口 
transport.tcp.port: 9300
# 集群个节点IP地址,也可以使用域名,需要各节点能够解析 【其他机器的IP地址】
discovery.zen.ping.unicast.hosts: ["192.168.1.6"] 
# 为了避免脑裂,集群节点数最少为 半数+1
discovery.zen.minimum_master_nodes: 2 

现在模拟两台机器:192.168.1.6 192.168.1.7 模拟es集群

注意:清空data和logs数据 , 192.168.1.6:9200/_cat/nodes?v,chmod 777 data / chmod 777 logs

启动es:nohup ./elasticsearch & 需要注意不能使用root账户启动。

集群管理工具:cerebro-0.8.3.zip 解压就可以用了。前提是必须安装jdk。它是用java编写的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/100748.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • initramfs实作「建议收藏」

    initramfs实作「建议收藏」这个是翻译来的,原文地址:http://www.landley.net/writing/rootfs-howto.html //TechTip:Howtouseinitramfs.怎样使用initramfs 工作过程简述在2.6kernel启动时,它把rootfs作为它的第一个文件系统挂载(注意:这里的rootfs是真名!!!不是roo

  • shell脚本export变量只限脚本内么_shell脚本调用oracle存储过程

    shell脚本export变量只限脚本内么_shell脚本调用oracle存储过程shell脚本中export命令未生效,原因详解问题:我有一个脚本,脚本中有如下一条语句exportfdu=“dufan”用sh运行脚本后,在当前shell利用命令env查看环境变量,但是却没有fdu变量,难道是因为我的export语句没有生效?解决结果:脚本中的export一定是生效的利用source执行脚本,在当前shell即可查看到fdu环境变量。这个问题涉及了三个知识点:变量(环境变量、自定义变量)父进程与子进程脚本的执行方式什么是变量?变量的分类?1.

  • u盘无法格式化怎么办?5种方法完美解决_U盘无法格式化怎么办

    u盘无法格式化怎么办?5种方法完美解决_U盘无法格式化怎么办今年暑假买的U盘,16G,突然某一天发现它要跪掉了。每次插上电脑都要显示格式化,一点击”格式化却显示“无法完成格式化”。当时真的想把电脑和U盘一起砸掉。。。。。然后在网上找了很多自称很牛逼的低级格式化的软件,还是败北了。后来用了这个软件 ChipGenius4.0   (http://dl.pconline.com.cn/html_2/1/60/id=50720&pn=0&linkPage=1.h

  • IntelliJ idea 主题包下载以及安装

    IntelliJ idea 主题包下载以及安装IntelliJidea默认的主体只有简单的白和灰,不一定能满足所有人的喜好,所以想要下载一些其它不错的主题包;主题下载地址;部分截图;选择自己喜欢的主题下载,个人还是比较喜欢SublimeText2主题,下载好之后,随意放个找得到的位置(还是放在安装目录下面吧,是个整体嘛),是个jar包。安装:file–>importsetttings–…

  • 用javascript教你打造一个免费的PC微信机器人《五》微信群发

    用javascript教你打造一个免费的PC微信机器人《五》微信群发上图先,来个效果图同一时间,向很多个群,发送你要发送的消息。现实中有很多解决方案,一个员工对应一个群,先把发送内容粘贴进文本框,读秒,同时按发送键。按键精灵,脚本?(没试过,有可能可以)还有其他方案没?一言不合,上代码先拿到你要发送的群或者好友列表(websocket,http去github去看httpclient.js):functionget_wxuser_list(){constj={id:getid(),type:USER_LIST,cont

  • C#中string.format用法详解「建议收藏」

    C#中string.format用法详解「建议收藏」string.Format对C#字符串格式化String.Format方法的几种定义:String.Format(String,Object)将指定的String中的格式项替换为指定的

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号