简介:

当我们在浏览器搜索关键词的时候,是从索引库中查询数据,而索引库里面是从网上爬取数据存放到索引库里面或者是本公司的数据(搜索本公司内部数据是站内搜索,分词存储)

Elasticsearch是一个实时的分布式搜索和分析引擎。它可以帮助你用前所未有的速 度去处理大规模数据。ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分 布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发 的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用 于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

Elasticsearch 关系型数据库Mysql
索引(index) 数据库(databases)
类型(type) 表(table)
文档(document) 行(row)

使用:

https://www.elastic.co/cn/downloads/past-releases/elasticsearch-5-6-8(下载路劲)
启动:
elasticsearch:安装直接解压,然后cmd后cd进入到安装的bin目录,执行elasticsearch
然后浏览器输入:http://localhost:9200/

打开postman:

1、创建索引库:

http://localhost:9200/tensquare_elasticsearch 使用put提交

2、创建类型:

http://localhost:9200/tensquare_elasticsearch/article post提交
{
“title”:”zzz”,
“content”:”xuexi”
}

3:查询所有:

http://localhost:9200/tensquare_elasticsearch/_search get提交

4、更新:

http://localhost:9200/tensquare_elasticsearch/article/AXITlgPBn2OcvWxAx9PD put提交
在id有的话就是修改,库里面没有id就是新增

5、条件查询

(后面是汉字的话是可以直接搜出来,是分词,但是字母不行)
http://localhost:9200/tensquare_elasticsearch/_search?q=title:zzz无色吧
http://localhost:9200/tensquare_elasticsearch/_search?q=title:无 (分词)
模糊查询:http://localhost:9200/tensquare_elasticsearch/_search?q=title:z

安装:elasticsearch-head-master

https://github.com/mobz/elasticsearch-head
一个node.js类似的插件
安装node js ,安装cnpm
npm install -g cnpm —registry=https://registry.npm.taobao.org
将grunt安装为全局命令 。Grunt是基于Node.js的项目构建工具。它可以自动运行你所 设定的任务
npm install -g grunt-cli
安装依赖
先cd D:\softWare\es\elasticsearch\esSoft\elasticsearch-head-master
cnpm install
进入head目录启动head,在命令提示符下输入命令
在 D:\softWare\es\elasticsearch\esSoft\elasticsearch-head-master这个目录下面
grunt server
步骤7: 打开浏览器,输入 http://localhost:9100
连接不上是因为跨越的原因在elasticsearch的conf下的yml添加下面的语句:
http.cors.enabled: true
http.cors.allow-origin: “*”
改完之后重启去安装的bin目录elasticsearch,然后刷新9100

image.png

elasticsearch:的使用

1、创建索引:

点击索引—>新建索引—>然后输入索引名字—>ok

2、增删改在页面的复合查询里面

新增:
image.png
修改:也是put
删除:是delete

3、查询在数据浏览里面:

image.png

IK分词器:

http://127.0.0.1:9200/_analyze?analyzer=chinese&pretty=true&text=我是程序员
分词一个字就是一个词
image.png

安装:

下载解压然后改名字为ik,改名之后把文件剪切到elasticsearch安装目录的plugins里面,然后重启elasticsearch
https://github.com/medcl/elasticsearch-analysis-ik/releases 下载5.6.8版
重启成功之后:ik提供了两个分词算法:ik_smart和ik_max_work

测试:

最小切分:
http://127.0.0.1:9200/_analyze?analyzer=ik_smart&pretty=true&text=我是程序
image.png
最细切分:
http://127.0.0.1:9200/_analyze?analyzer=ik_max_word&pretty=true&text=我是程序员
image.png
随着社会发展新词越来越多,当我们搜索新词的时候被分为一个个的字,需要加入词条,一个新词变成一个词条

做法:

找到ik放置的位置,打开config,新建或者复制一份(删除内容)改为utf-8的格式custom.dic
然后打开IKAnalyzer.cfg.xml把我们刚刚扩展的文件加入到扩展词汇里面去就行

custom.dic
重启es的服务:
http://127.0.0.1:9200/_analyze?analyzer=ik_max_word&pretty=true&text=传智播客
image.png

搜索微服务的开发:没有操作数据库

现在本地测试,服务器的ip
server:
port: 9007
spring:
application:
name: tensquare-serach
data:
elasticsearch:
cluster-nodes: 127.0.0.1:9300

logstash:

Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的、多样化的日志搜集 起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件。

测试:

解压进入bin,
logstash -e ‘input { stdin { } } output { stdout {} }’ (真正开发的时候命令很长)
出现找不到java,在logstash.bat里加入下面的
image.png

连接到mysql模板:

写好的模板:conf.txt

需要一个conf和mysql驱动
image.png
需要去到mysql.conf的目录去执行(保证es必须启动)
image.png
然后cmd执行下面的命令:logstash -f ../mysqletc/mysql.conf
image.png
数据库里的数据如果删除的时候,es索引里面的数据不会删除,这是我们可以根据state来查询出需要的数据

容器部署es:

docker run -di —name=tensquare_es -p 9200:9200 -p 9300:9300 elasticsearch:5.6.8
9200是es的端口 9300需要使用9200创建索引库
image.png
然后我们打开postman创建索引和类型
http://192.168.179.20:9200/tensquare_article/article(提交方式post)
然后把我们的程序端口换成虚拟机的地址和端口启动程序,然后postman新增)article(http://localhost:9007/article/):
data:
elasticsearch:
cluster-nodes: 192.168.179.20:9300

发现报错:

端口不能用:of the configured nodes are available: [{#transport#-1}{TS33ry04QqK-tTK6oebKrA}{192.168.179.20}{192.168.179.20:9300}]

解决方法:

1、可以使用sed命令把#删除,就不需要下面的步骤
image.png
但是发现重启失败需要调优,当我们删除注释之后我们需要给他资源才能重启
我们一共需要修改两处
修改/etc/security/limits.conf ,追加内容
soft nofile 65536
hard nofile 65536
nofile是单个进程允许打开的最大文件个数 soft nofile 是软限制 hard nofile是硬限制
修改/etc/sysctl.conf,追加内容
vm.max_map_count=655360
限制一个进程可以拥有的VMA(虚拟内存区域)的数量
然后重启虚拟机reboot


进入容器内部修改配置文件:但是没有vi等命令
1、把要修改的配置文件cp到宿主机的一个目录
docker cp tensquare_es:/usr/share/elasticsearch/config/elasticsearch.yml /usr/share/elasticsearch.yml
2、
docker stop tensquare_elasticsearch
docker rm tensquare_elasticsearch
3、
docker run -id —name=tensquare_es -p 9200:9200 -p 9300:9300 -v /usr/share/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:5.6.8
docker run -itd —name=tensquare_es -p 9200:9200 -p 9300:9300 -v /usr/share/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:5.6.8 bash

但是发现重启失败需要调优,当我们删除注释之后我们需要给他资源才能重启
我们一共需要修改两处
修改/etc/security/limits.conf ,追加内容
soft nofile 65536
hard nofile 65536
nofile是单个进程允许打开的最大文件个数 soft nofile 是软限制 hard nofile是硬限制
修改/etc/sysctl.conf,追加内容
vm.max_map_count=655360
限制一个进程可以拥有的VMA(虚拟内存区域)的数量
然后重启虚拟机reboot

容器的ik分词器:

http://192.168.179.20:9200/_analyze?analyzer=ik_smart&pretty=true&text=我是程序
在宿主机中将ik文件夹拷贝到容器内 /usr/share/elasticsearch/plugins 目录下。
docker cp elasticsearchIk tensquare_es:/usr/share/elasticsearch/plugins/
容器重启然后测试发现容器的这个也可以分词了

image.png

docker的HEAD插件安装

让他可以在浏览器上访问连接
(1)修改/usr/share/elasticsearch.yml ,添加允许跨域配置(因为docker文件映射了所以修改外面的就行)
http.cors.enabled: true
http.cors.allow-origin: “*”
(2)创建容器header
docker run -id —name=tensquare_header -p 9100:9100 mobz/elasticsearch-head:5

然后浏览器访问9100:
运行程序在postman里面添加索引和类型
image.png