简介:ElasticSearch es是一个开源的高扩展的分布式全文检索引擎。它可以近乎实时的存储,检索数据;从而让全文搜索变得简单;
安装与启动:
官网:https://www.elastic.co/products/elasticsearch
下载 解压即已安装好 bin目录下执行启动命令即可 默认端口9200
安装ES的图形化界面插件
es不同于solr自带图形化界面,我们可以跳过安装ElasticSearch的head插件,完成图形化界面的效果;
下载head插件:https://github.com/mobz/elasticsearch-head.git
还需要安装node.js 原因 head是基于nodejs开发的 使用前需要启动nodejs服务
下载nodejs:https://nodejs.org/en/download/
node -v
再cmd控制台输入如下执行命令:npm install -g grunt-cli
进入elasticsearch-head-master目录启动head 再命令提示符下输入命令:
npm install
grant server
localhost:9100访问
概述:
elasticsearch是面向文档的,这意味着它可以存储整个对象或文档,然而它不仅仅是存储,还会索引
每个文档的内容使之可以被搜索。再Elasticsearch中,你可以对文档进行索引,搜索,排序,过滤
postman创建索引
使用postman设置mapping映射
删除索引库:
向索引库中添加文档
创建文档document
请求url:
POST localhost:9200/blog1(索引)/article(type)/1(文档id 相当于主键 不指定为自动生成)
请求体:
{
"id":100,
"title":ElasticSearch是基于Lucene的搜索服务器
"content":它提供了一个分布式多用户的全文搜索引擎,基于Restful web接口,ElasticSearch是用Java开发的,并作为Apache的许可许可条款下的开放源代码发布,是当前流行的企业搜索引擎,设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
}
使用head向索引库中添加文档:
点击复合查询:url->post->请求体
删除文档删除:
postman
请求方式:delete
http://localhost:9200/blog(索引)/hello(type)/1(主键)
head中的复合查询功能也可以
修改文档
原理:先删除后添加
post:http://localhost/blog(索引)/hello(字段)/1(主键)
主键有就删除然后添加 没有就直接新增
{
"id":1,
"title":"新添加的文档1",
"contnet":"新添加的文档的内容"
}
数据体
根据id查询文档:
请求方式:get
http://localhost:9200/blog(索引)/hello(字段)/1(主键)
根据关键词进行查询
请求方式:post
http://localhost:9200/blog(索引)/hello(字段)/_search
根据请求体查询
{
"query":{
"term":{
"title":"修"
}
}
}
queryString 查询
请求方式:POST
localhost:9200/blog1/article/_search
请求体:
{
"query":{
"query_string":{
"default_field":"title",#指定搜索域
"query":"网约车顺风车平台"#会采取分词查询,比如"今天在修路",就会把文档中含有修的查出来
}
}
}
head中基本查询也可以 符合查询
IK分词器和ElasticSearch集成使用
1.上述查询存在问题分析
在进行字符串查询时,我们发现取搜索"搜索服务器"和"钢索"都可以搜索到数据
而进行词条查询时,我们搜索"搜索"却没有搜索到数据;
究其原因是ElasticSearch的标准分词器导致的,我们创建索引时,字段使用的标准分词器
请求方式get
localhost:9200/_analyze(进行分词)?analyzer(指定分词器)=standard(标准分词器)&text(要分析的文本)="aaaa"
ik分词器
IkAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。特性如下:
1.采用了特有的正向迭代最细粒度切分算法,具有60万字/秒
2.采用了多子处理分析模式,支持:英文字母(IP地址,Email,URL)、数字(日期,常用中文数量
词,科学计数法),中文词汇(姓名,地名处理)等词汇处理。
3.对中英联合支持支持不是很好,在这方面的处理比较麻烦,需要在做一次查询,同时是支持个人词条的优化的词典存储,更小的内存占用。
4.支持用户词典扩展定义。
5.针对Lucnece全文检索优化的查询分析器KQueryParser;采用歧义分析算法优化查询关键字的搜索排
列组合,能极大的提高Lucence检索的命中率
ElasticSearch集成IK分词器
IK分词器安装
下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
解压放到elasticsearch/plugins/目录下去 启动elasticsearch 即可
能正常启动及说明成功
IK提供了两种分词算法
ik_smart最少切分:
localhost:9200/_analyze(进行分词)?analyzer(指定分词器)=ik_smart&text(要分析的文本)="我是程序员" 会拆分在 我,是,程序员;
ik_max_word最细粒度划分:
localhost:9200/_analyze(进行分词)?analyzer(指定分词器)=ik_max_word&text(要分析的文本)="我是程序员" 会拆分在 我,是,程序员,程序,员;
集群:
搭建
准备三台elasticsearch服务器
修改每台服务器配置
解压压缩包 删除data目录存放索引库
修改elasticsearch-cluster\node*]\config\elasticsearch.yml配置文件
node1节点:
http:cors.enabled: true
http.cors.allow-orgin: "*"
#集群名称,保证唯一
cluster.name: my-elasticsearch
#节点名称:名称不一样
node.name: node-1
#必须为本机的ip地址
network.host: 127.0.0.1
#服务端口号,在同一机器必须不一样 http服务
http.port: 9201
#集群间通信端口号,在同一机器下必须不一样 tcp服务
transport.tcp.port: 9301
#设置集群自动发现机器ip集合
discovery.zen.ping.unicast.hosts ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]
node2:
http:cors.enabled: true
http.cors.allow-orgin: "*"
#集群名称,保证唯一
cluster.name: my-elasticsearch
#节点名称:名称不一样
node.name: node-2
#必须为本机的ip地址
network.host: 127.0.0.1
#服务端口号,在同一机器必须不一样 http服务
http.port: 9202
#集群间通信端口号,在同一机器下必须不一样 tcp服务
transport.tcp.port: 9302
#设置集群自动发现机器ip集合
discovery.zen.ping.unicast.hosts ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]
node3:
http:cors.enabled: true
http.cors.allow-orgin: "*"
#集群名称,保证唯一
cluster.name: my-elasticsearch
#节点名称:名称不一样
node.name: node-3
#必须为本机的ip地址
network.host: 127.0.0.1
#服务端口号,在同一机器必须不一样 http服务
http.port: 9203
#集群间通信端口号,在同一机器下必须不一样 tcp服务
transport.tcp.port: 9303
#设置集群自动发现机器ip集合
discovery.zen.ping.unicast.hosts ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]
分别启动三个节点
head连接其中任意一个节点即可
集群环境下创建索引