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)


相关推荐

  • git branch 命令查看分支、删除远程分支、本地分支

    git branch 命令查看分支、删除远程分支、本地分支gitbranch命令操作1、查看本地分支:gitbranch前面带有*号的是当前分支2、删除本地分支:gitbranch-d[branchname]提示删除了一个名为list的本地分支3、删除远程分支:gitpushorigin–delete[branchname]提示删除了一个名为201804019-test-files的…

  • 分享我常用的5个免费的在线 SQL 数据库环境,简直太方便了!

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:不剪发的Tony老师 blog.csdn.net/horses/article/details/1086039…

  • potplayer+madvr_potplayer安装包

    potplayer+madvr_potplayer安装包ctrl+j调出madvr的OSD菜单如下图:如何设置madVR10bit输出:1.确保视频源是10bit源2.显示器设置如下:3.渲染设置如下:设置完成,OSD信息变化如下:如何确定是否HDR设置生效:调节如下targetpeaknits:100或者200,如果100比200时的屏幕亮,说明HDR生效。…

  • mysql命令查看版本_查看mysql

    mysql命令查看版本_查看mysql在日常项目开发过程中,我们经常要连接自己的数据库,此时不知道数据库的版本是万万不可的。今天小树懒来给大家总结一下查看mysql版本的方法。MySQL查看版本的方法主要有以下四种方法1:没有连接到MySQL终端下直接使用mysql命令。打开cmd,切换至MySQL的bin目录,运行以下命令:[root@localhostlib]#mysql-VmysqlVer15.1Distrib5.5.47-MariaDB,forLinux(x86_64)usingreadl

  • 创建数组的两种方式

    创建数组的两种方式1.通过构造函数创建数组1.1let变量名称=newArray(size)//创建一个指定大小的数组1.2let变量名称=newArray()//创建一个空的数组1.3let变量名称=newArray(data1,data2,…)//创建一个带数据的数组2.通过字面量创建数组2.1 let变量名称=[]创建一个空数组…

  • 计算机全选的键盘,什么是全选快捷键,我将告诉您什么是计算机全选快捷键

    计算机全选的键盘,什么是全选快捷键,我将告诉您什么是计算机全选快捷键在我们的日常工作中,使用快捷键可以提高我们的工作速度,因此我们会记住一些易于使用的快捷键。许在编辑文本时都想使用全选快捷键,但是他们不知道要在键盘上按哪些键。下面,我将向您介绍选择所有快捷键的计算机。经常使用计算机的朋友更加熟悉计算机常用的一些基本快捷键,并且所有人都使用快捷键进行操作,从而提高了工作效率,但是有些新手网民仍然不了解基本的计算机快捷键键,例如选择计算机的快捷键是什么?有些网友不知道…

发表回复

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

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