ElasticSearch基础

ElasticSearch 系列文章

1 ES 入门之一 安装ElasticSearcha

2 ES 记录之如何创建一个索引映射

3 ElasticSearch 学习记录之Text keyword 两种基本类型区别

4 ES 入门记录之 match和term查询的区别

5 ElasticSearch 学习记录之ES几种常见的聚合操作

6 ElasticSearch 学习记录之父子结构的查询

7 ElasticSearch 学习记录之ES查询添加排序字段和使用missing或existing字段查询

8 ElasticSearch 学习记录之ES高亮搜索

9 ElasticSearch 学习记录之ES短语匹配基本用法

10 ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理

11 ElasticSearch 学习记录之集群分片内部原理

12 ElasticSearch 学习记录之ES如何操作Lucene段

13 ElasticSearch 学习记录之如任何设计可扩容的索引结构

14 ElasticSearch之 控制相关度原理讲解

 

Windows安装ElasticSearch:

官网下载压缩包后解压即可,就完成安装了。

运行bin/elasticsearch.bat文件运行,注意ES要使用jdk8以上版本。

默认提供9200和9300端口。

因为提供http服务,所以启动后可以直接浏览器访问localhost:9200就可以看到ES的服务了。

 

管理ES的图形界面工具:head插件的安装及配置

1.在https://github.com/mobz/elasticsearch-head中下载head插件,选择下载zip,并解压。

2.这个插件不是java开发的,它的运行需要依赖运行在服务端的node.js,所以需要先把Node.js安装起来。

从地址:https://nodejs.org/en/download/ 下载相应系统的msi,一路下一步安装。

安装完成用cmd进入安装目录执行 node -v可查看版本号。接下来就可以启动head服务了。

3.在运行head前,还要安装grunt  。

通过在head解压目录按住shift后右键打开cmd,执行命令

npm install -g grunt-cli

安装grunt ,安装完成后执行grunt -version查看是否安装成功,会显示安装的版本号

此时还要执行一个

npm install

4.安装完成后运行head插件。

执行

grunt server

 

此时就可以登录http://localhost:9100查看到界面了。

但是此时跨域了还不能连接9200的ES端口,所以还要对ES的配置文件里配置一下允许跨域访问。

5.修改elasticsearch相关配置

修改 elasticsearch/config/elasticsearch.yml

添加

http.cors.enabled: true
http.cors.allow-origin: "*"

接下来关掉ES服务重新启动,在浏览器访问https://localhost:9100/点击连接就可以成功了。

 

ElasticSearch的核心概念介绍

一、near realTime(NRT):接近实时,从写入数据到数据可以搜索到有一个小延迟(一秒),基于es的搜索和分析可以达到秒级。

二、cluster集群:包含多个节点,每个节点是属于哪个集群是通过一个配置(集群名称,默认是elasticsearch)来决定的。

三、node节点:集群中的一个节点,节点的名称是默认随机分配的,在执行运维管理操作的时候节点名称很重要,默认节点会加入一个叫elasticsearch的集群。

四、document文档和field:document是es中最小的数据单元,一个document可以是一条数据,通常用json数据结构表示,每个index下的type中可以存储多个document,一个document里面有多个field,每个field就是一个数据字段。

五、index索引:包含一堆有相似结构的document文档数据,一个index代表了一类类似的或相同的document。

六、type类型:每个index里面可以有多个或一个type,type是index的一个逻辑分类,一个type下的document都有相同的field,

七、shard分片:单台机器无法存储大量的数据,es可以将一个index中的数据切分为多个shard,分布在多个机器上进行存储,有了shard可以进行横向扩展,进而可以存储更多的数据,让搜索和分析等操作分布到多台机器上去执行,提高吞吐量和性能,每个shard都是一个Lucene index。

八、replica副本:任何一个服务都可能出现故障或者宕机,此时shard的数据就有可能丢失,因此可以为每个shard建立replica副本,replica可以在shard发生故障时提供备用服务保证数据不丢失,多个replica还可以提供搜索和分析等操作的性能。建立index时一次性设置primary shard,不能进行修改,默认是5个,replica可以随便修改,默认是1个(这里的1个的意思是每个primary shard拥有一个replica shard),默认每个索引有10个shard,5个primary shard,5个replica shard,最小的高可用配置,默认是2台服务器。

九、mapping索引:对索引库的索引字段名称和数据类型、是否存储、是否被索引、分词等进行定义。

 ———————————————— 

总结:

其实elasticsearch就相当于一个数据库

index  ——>  数据库

type  ——>    数据库表

document  ——>  表里的一行

field  ——> 表里的每一列
 ———————————————— 
 

 

创建索引、postman通过http发送json对索引进行管理

 

使用postman创建索引:

 

使用postman设置mapping映射:

选择post提交,url中为:索引/type名/_mapping

注意请求体中不再有mapping键值对,而直接是type要设置的mapping信息

 

使用postman删除索引库:

 

以上这些操作在9100端口页面通过"复合查询"页面同样可以实现。

 

使用postman向索引库中添加文档

url:索引名/type名/文档id(真正的id是_id)

注意:请求体中的id只是有个field正好叫id,并不是真正的_id。url中的id也可以不写,系统会自动生成_id。

 

添加好后可以在“数据浏览”中查看。其中左侧是过滤的功能。

 

使用postman删除文档操作

 

使用postman修改文档(原理是先删除后添加保持_id)

 

使用postman根据id查询文档

两种方式:

1、根据文档id来查询

 

2、根据关键词来查询

url:索引名/type名/_search

请求体中为要查询的field名和值。

注意:如果field采用的分词器无法分出要查询的值的话是查不到的。标准分词器对汉字默认是一个一个分的。

 

3、queryString查询

queryString查询会启用分析器对条件值进行分词然后进行查询。

请求体中指定默认分析域default_field。

 

使用head插件查询使用

使用postman查看分析器的分词效果

GET请求即可

http://localhost:9200/index-hello/_analyze?analyzer=standard&text=ES对英文分词是空格分词,但是中文是一个一个汉字分的

 

ES集成ik分词器插件

首先找到对应版本的插件
通过 http://192.168.1.8:9200查看ES的版本,找到对应的IK分词插件

下载与之对应的版本
https://github.com/medcl/elasticsearch-analysis-ik/releases

然后将zip包解压缩后会得到一个elasticsearch这个目录,将这个目录放到ES的plugins目录下,可以改个名叫ik-analyzer。重启ES后就集成ik了。

查看插件是否安装成功:http://localhost:9200/_cat/plugins

 

ik支持细粒度ik_max_word和智能ik_smart分词两种切分模式。同样可以通过get请求查看分词效果:

http://localhost:9200/index-hello/_analyze?analyzer=ik_smart&text=ES对英文分词是空格分词,但是中文是一个一个汉字分的
http://localhost:9200/index-hello/_analyze?analyzer=ik_max_word&text=ES对英文分词是空格分词,但是中文是一个一个汉字分的

 

ik分词器使用

在创建index索引库的之后设置mapping信息来指定字段分词器为ik_max_word或者ik_smart。

然后向索引库中添加文档,然后通过关键字查询方式(term)、queryString方式查询,来检验分词的效果。如果对词语能合理查询到那就证明使用的分词器为ik了。

 

elasticsearch集群

 

 索引(index)& 分片(shard)

索引(index)是一个存储关联数据的地方,用来指向一个或多个分片(shards)的“逻辑命名空间”(logical namespace)

分片(shard)是一个最小级别的“工作单元”(worker unit)保存了索引中所有数据的一部分,分片是一个Lucene实例,具有完整的搜索引擎,文档(doc)就存储在分片中。
分片可以分为主分片(primary shard)和复制分片(replica shard):
索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。
复制分片只是主分片的一个副本,可以防止硬件故障导致的数据丢失,同时可以提供读请求,比如搜索或者从别的shard取回文档。

索引创建完成,主分片的数量就是固定的,但是复制分片是可以随时调整的。

 

集群搭建

将之前建立的ES服务目录复制就可以形成一个新的节点,但是注意:

一、一定要删除里面的data目录才能是干净的节点。

二、修改config/elasticsearch.yml配置,

集群名称,必须一致,
cluster.name:elasticsearch
节点名称,不可以一样,这里按照node-1、node-2、node-3进行命名
node.name:node-1

# elasticsearch-node1配置
# 配置集群名称,每个节点保证相同
cluster.name: my-elasticsearch
# 配置节点名称,不同节点必须不一样
node.name: node-1
# 必须为本机ip
network.host: 127.0.0.1
# 为节点之间的通信设置一个自定义端口(默认为9300),同一机器下必须不同 
transport.tcp.port: 9301 
# 设置监听HTTP传输的自定义端(默认为9200)。服务端口号,同一机器下必须不同
http.port: 9201
# 设置集群自动发现机器ip集合
discovery.zen.ping.unicast.hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"]

 

如上弄出3个ES服务后就可以将3个服务都启动起来。

此时通过head插件页面就可以任意连接9201或者9202/9203了。

其中星号代表是主节点,圆点代表从节点。连接按钮后面显示的是集群名称。

 

测试集群

测试内容同单机版一样:创建索引库、添加映射、添加文档,然后查询看。下面看创建索引库后的展示。

通过head插件来创建索引库,查看创建后的结果。

 

节点边框为粗线的是主节点。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值