ElasticSearch学习笔记

本文重点:引擎分类、logstash、es、ik分词器、head插件

搜索引擎分类

1.网站搜索:例如百度、谷歌等
2.站内搜索:个人网站搜索

参考连接

https://blog.csdn.net/qq_41474525/article/details/128897962
https://learnku.com/docs/elasticsearch73/7.3/get-elasticsearch-up-and-running/6449
http://www.elasticsearch.cn/

ES相关概念

  1. 索引:相当于数据库。
  2. 类型:相当于数据库表。
  3. 文档:相当于数据库表行。

安装

访问ES官网直接下载解压,便可使用。解压成功后,进入bin目录,运行cmd,输入elasticsearch命令,即可看到es运行了两个端口,一个9200,一个9300,java连接es使用9300端口,除外都使用9200。

运行成功后,浏览器输入http://localhost:9200,便可看到如下界面。在这里插入图片描述

使用

1. 新建索引

例如我们要新建一个叫articleindex的索引,就以put方式提交

http://localhost:9200/articleindex/

结果如下:
在这里插入图片描述

2.新建文档

因为类型是弱引用,所以直接在url后面跟类型。例如:
新建一个article类型文档

POST: http://localhost:9200/articleindex/article

传入数据:

{
	"title":"es学习笔记",
	"content":"es新建文档"
}

返回结果:
在这里插入图片描述

3.查询

例如我们要查询刚刚创建的article类型的所有文档,给url后面加上"_search"

GET: http://localhost:9200/articleindex/article/_search

查询结果:
查询结果

根据id查询:   GET: http://localhost:9200/articleindex/article/[要查询的_id(前面不用加_search)]
根据title查询:GET: http://localhost:9200/articleindex/article/_search?q=title:es学习笔记
模糊查询:     GET: http://localhost:9200/articleindex/article/_search?q=*es学习* 
			  (模糊查询要给查询的词加上"*要模糊查询的词*")

4.修改

修改的时候要带上刚创建成功的"_id"
在这里插入图片描述
例如我们要修改刚创建的那一条数据:

PUT: http://localhost:9200/articleindex/article/AWYD_DQz08TyZe-Re1rv

请求体内容:

{
	"title":"es学习笔记修改",
	"content":"es修改"
}

返回结果:
修改返回结果
注意
如果修改的url的id后缀存在就是修改,否则视为新创建:http://localhost:9200/articleindex/article/[要修改或者创建的_id]

5.删除

例如删除_id为1的数据:

DELETE: http://localhost:9200/articleindex/article/1

返回结果:
删除返回结果

Head插件

如果都是通过rest请求的方式使用es,未免太过麻烦,而且也不够人性化。我们一般会使用图形化界面来实现es的日常管理,最常用的就是Head插件。

下载解压
  1. 下载head插件:http://github.com/mobz/elasticsearch-head
  2. 下载elasticsearch-head-master.zip
  3. 解压到任意目录,但是要和es的安装目录区分开来。
  4. 安装node.js,安装cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
  1. 将grunt安装为全局命令。Grunt是基于Node.js的项目构建工具。他可以自动运行你所设定的任务。
npm install -g grunt-cli
  1. 安装依赖
    进入Head插件的解压目录,根据该目录下的pakage.json安装依赖包
cnpm install

安装完成之后,你会发现该目录下会多一个node_modules包

  1. 启动
    进入Head的解压目录启动Head,在命令提示符下输入命令
grunt server
  1. 访问
    打开浏览器,输入http://localhost:9100
    访问head插件
  2. 点击链接按钮没有任何反应,按F12发现有如下错误:

No ‘Access-Controller-Allow-Origin’ header is present on the requested resource

这个错误是由于es默认不允许跨域调用,而elasticsearch-head属于前端工具,所以报错。我们这个时候需要修改前端es的配置,让其允许跨域访问。
修改es的配置文件:elasticsearch.yml,增加以下两句命令:

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

此步为允许es跨域访问,点击链接即可看到相关信息。

Head工具使用

添加索引

新建索引

查询
  1. 根据索引查询
    根据索引查询
  2. 新增、修改、删除
    输入请求和之前在postman的增删改类似,请参考上面的描述。
    增删改

ik分词器

ik分词器主要是用来对用户要搜索的文本按照一定的规则进行拆分

ik分词器安装

下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases

  1. 将下载下来的压缩包进行解压,将解压后的elasitcsearch文件夹重命名为ik
  2. 将ik文件夹拷贝到elasticsearch/plugins目录下
  3. 重新启动es,即可加载IK分词器
ik分词器测试

ik提供了两个分词器算法:ik_smart和ik_max_word
其中ik_smart为最少切分,ik_max_word为最细粒度划分
我们分别来试一下:

  1. ik_smart:在浏览器地址栏输入地址
http://localhost:9200/_analyze?analyzer=ik_smart&pretty=true&text=我是程序员

结果如下:
ik_smart分词结果
2. ik_max_word
在浏览器地址栏输入地址

http://localhost:9200/_analyze?analyzer=ik_max_word&pretty=true&text=我是程序员

结果如下:
ik_max_word分词结果

自定义词库

有时候会有一些网络用语新产生的词汇,就需要将新的词汇收录到es服务器,这时候就需要用到收录词条。

进入ik/config文件夹下,创建一个custom.dic文件,通过可保存文件为utf-8的文本编辑器打开,输入“人艰不拆”,保存。在同目录下打开IKAnalyzer.cfg.xml,在entry的ext_dice中输入新加的custom.dic,然后保存之后并进行重启es。
在这里插入图片描述
再重新在浏览器输入:

http://localhost:9200/_analyze?analyzer=ik_max_word&pretty=true&text=人艰不拆

此时分词器会将“人艰不拆”作为一个完整的词汇进行分词,而不是分为4个单独的词。

代码连接es

在POM.XML中添加

<dependency>
	<groupId>org.springframework.data</groupId>
	<artifactId>spring-data-elasticsearch</artifactId>
	<version>3.0.6.RELEASE</version>
</dependency>

在application.yml中添加

spring:
	data:
		elasticsearch:
			cluster-nodes:127.0.0.1:9300 #连接es的地址

创建相关实体类:
analyzer:分词的时候按这个算法分词(存储用的)
searchAnalyzer:搜索的时候按这个算法分词(搜索用的)
这两个一般值一样,确保按照分词能搜索到
es相关实体类
创建相关dao层,注意继承ElasticsearchRepository接口就行
es创建dao层
service层、controller层和一般代码无二。

Logstash

什么是Logstash?

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

Logstash安装与测试

将Logstash压缩包解压,进入bin目录:

logstash -e 'input {stdin { }} output{stdout {} }'

控制台输入字符,随后就有日志输出。

Mysql数据导入Elasticsearch
  1. 在logstash-5.6.8安装目录下创建文件夹mysqletc
  2. 文件夹下创建mysql.conf(名称随意),内容如下:
    再将mysql-connect-java的jar拷入同目录下。
input{
	jdbc{
		jdbc_connection_string=>"jdbc:mysql://127.0.0.1:3306/数据库名称?characterEncoding=utf-8"
		jdbc_user=>"root"
		jdbc_password=>"root"
		jdbc_driver_library=>"当前路径下mysql-connect-java的jar包的完整限定名"
		jdbc_driver_class=>"com.mysql.jdbc.Driver"
		#是否分页
		jdbc_paging_enabled=>"true"
		#分页条数
		jdbc_page_size=>"50"
		#以下对应着要执行的sql的绝对路径
		#statement_filepath=>""
		statement=>"select id,其他字段 from 表名称"
		#定时任务 各字段含义(由左至右)分、时、天、月、年,全部为*表示每分钟都更新
		schedule=>"* * * * *"		
	}
}
output{
	elasticsearch{
		#ESIP地址与端口
		hosts => "127.0.0.1:9200"
		#ES索引名称
		index => "索引名称"
		#自增id编号,这个id对应上面数据库sql查询出来的id
		document_id=>"%{id}"
		#es类型
		document_type=>""
	}
	stdout{
		#以json格式输出
		codec => json_lines	
	}
}

然后命令提示符输入以下命令,执行该conf文件,将数据库内容导入es的索引库。

logstash -f 该文件的路径/mysql.conf

然后等待每分钟执行刷新一次数据便可。

docker安装ES
  1. 下载镜像:
docker pull elastcisearch:5.6.8
  1. 创建容器
docker run -di --name=容器名称 -p 9200:9200 -p 9300:9300 elasticsearch:5.6.8
  1. 浏览器验证是否成功。
http://服务器url:9200
  1. es安装在服务器的时候,9200可用,9300如果宿主机没开启的话,一般是不可用的,那么如何解决9300不可用呢?
    首先我们要进入docer创建的es容器,固定写法:
docker exec -it 容器名称 /bin/bash(内存中固定的路径,这样写就行)

要解决9300不能访问的问题就必须修改elasticsearch/config/elasticsearch.yml,但是在docker容器中是不能直接编辑(vi)的,所以必须用docker cp将该文件拷贝到宿主机,然后修改好之后再拷贝回去。
修改内容如下:

#意思是所有ip都可以访问,如果要限定只有某个ip可以访问,那么将其改为固定ip即可。
transport.host:0.0.0.0
  1. 开启了所有ip访问之后,会发现后台启动报错,启动不起来,这是什么原因呢?是因为宿主机软硬件、内存不能支撑。所以我们还需要系统调优。
    我们一共需要修改两处地方:
    5.1. 修改/etc/security/limits.conf,追加内容
* soft nofile 65536
* hard nofile 65536

nofile是单个进程允许打开的最大文件个数,softnofile是软限制,hard nofile是硬限制
5.2. 修改/etc/sysctl.conf,追加内容

vm.max_map_count=655360

限制一个进程可以拥有的VMA(虚拟内存区域)的数量
执行下面命令,修改内核参数马上生效

sysctl -p

注意: 复制上面的命令的时候,注意要将中文空格转换为英文的

  1. 重新启动虚拟机,再次启动容器,发现已经可以启动并远程访问
	> reboot #重启虚拟机
	> systemctl start docker #启动docker服务
	> docker images #查看虚拟机上所有的docker镜像
	> docker ps -a #查看虚拟机上 【已经运行/未运行】 的docker容器
	> docker ps  #查看虚拟机上已经运行的docker容器
docker安装ik分词器

将下载好的ik分词器使用docker命令复制到es的plugins文件夹中,参考上面的ik学习。

docker安装head插件

制作head镜像,运行。参考上面的head插件初学。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
elasticsearch 学习笔记包括以下内容: 一、Elasticsearch概述: - Elasticsearch是一种开源的分布式搜索和分析引擎,可以用于快速搜索、分析和存储大量的结构化和非结构化数据。 - Elasticsearch与Solr相比有一些区别,包括用户、开发和贡献者社区的规模和成熟度等方面。 二、Elasticsearch安装: 1. 下载Elasticsearch,可以从官方网站或华为云镜像下载。 2. 安装Elasticsearch。 三、安装head插件: - head插件是一个可视化的管理界面,可以方便地管理和监控Elasticsearch集群。 四、安装Kibana: 1. Kibana是一个开源的数据可视化工具,用于展示和分析Elasticsearch中的数据。 2. 下载Kibana并安装。 3. 启动Kibana并进行访问测试。 4. 可选的汉化操作。 五、ES核心概念理解: - 学习ES的核心概念,包括索引、文档、映射、查询等。 以上是elasticsearch学习笔记的主要内容,希望对你有帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Elasticsearch 学习笔记(上)](https://blog.csdn.net/m0_52691962/article/details/127064350)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值