SpringBoot入门-集成ElasticSearch(一)

前言

ES是现在流行的搜索引擎,在用ES之前,我们首先要明确一个问题,为什么要用ES?其实ES的很多功能MySQL也能实现,搜索可以用like,数据分析聚合可以用group by,似乎不用ES也行,现实也是如此,很多项目也没用到ES,我认为满足以下某一条的,就要考虑使用ES了。

  • MySQL无法实现的一些功能,像分词搜索,高亮等。比如用小米的手机来搜索小米手机,MySQL是无法实现的,只能通过ES
  • 海量数据存储与搜索,MySQL单表千万级压力就挺大了,ES单个索引存储十几亿的记录很常见,主要是ES可以很方便的水平扩展
  • 构建分布式系统,分担数据库压力,在分布式系统中数据库往往是瓶颈,这时一些非核心的,事务无关的数据就可以考虑存入ES中,虽然数据库也能靠分库分表扩展其性能,但也有很多缺陷,像我之前对接的一个智能锁平台,它的日志是按照日期分表的,导致查询不能跨月,很不方便,如果存入ES就没有这个问题了

综上,在分布式系统和海量数据存储与搜索中,ES是很有用的。

 linux下环境搭建

 我们使用docker compose来搭建环境,docker compose是轻量级的容器编排技术,虽然功能不如K8S强大,但使用起来更加简单,特别适合平时学习时环境搭建和中小型项目的部署。

es需要更改sysctl.conf
vi /etc/sysctl.conf
2、添加下面配置:
vm.max_map_count=655360
3、并执行命令:
sysctl -p

修改/etc/security/limits.conf,添加
* soft nofile 65536
* hard nofile 65536
* soft memlock unlimited
* hard memlock unlimited

docker-compose.yml如下

version: '3.1'

services:
 elasticsearch:
   image:  elasticsearch:7.14.0
   container_name: es-master
   restart: always
   volumes:
     - ./data:/usr/share/elasticsearch/data:rw
     - ./logs:/usr/share/elasticsearch/logs:rw
     - ./plugins:/usr/share/elasticsearch/plugins:rw
   environment:
     - TAKE_FILE_OWNERSHIP=true
     - TZ=Asia/Shanghai
     - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
     - discovery.type=single-node
     - "ELASTIC_PASSWORD=123456"
     - "xpack.security.enabled=true"
   ulimits:
     nofile:
       soft: 65536
       hard: 65536
     memlock:
       soft: -1
       hard: -1
   network_mode: "host"

ik分词下载地址,

Releases · medcl/elasticsearch-analysis-ik · GitHub,下载完解压到plugins/ik下就行了

ik目录下面是这样的 

 

 在docker-compose.yml下面敲docker-compose up -d 就能起来了

在浏览器里面输http://ip:9200,出现以下信息说明安装成功了

验证分词是否生效

发送http请求,如果es加了密码,需要在头字段中加Authorization头字段,value为

Basic base64(elastic:密码),Basic为默认前缀,elastic为默认账号名,base64为加密方式

analyzer支持ik_max_word和ik_smart,ik_max_word表示尽量多分词,ik_smart则相反

POST http://localhost:9200/_analyze

{
    "analyzer":"ik_max_word",
    "text":"我是中国人"
}

 返回如下说明分词生成

 停止词(stopword)

如果分词小米的手机会发现分成了三个词:小米,的,手机,这时就会对搜索产生影响,如何去掉'的'呢?这就要用到停止词

打开plugins/ik/config/IKAnalyzer.cfg.xml

在ext_stopwords配置上extra_stopword.dic,extra_stopword.dic是ik自带的一个停止词字典,里面记录了常用的停止词,也可以自己添加

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
	<comment>IK Analyzer 扩展配置</comment>
	<!--用户可以在这里配置自己的扩展字典 -->
	<entry key="ext_dict"></entry>
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords">extra_stopword.dic</entry>
	<!--用户可以在这里配置远程扩展字典 -->
	<!-- <entry key="remote_ext_dict">words_location</entry> -->
	<!--用户可以在这里配置远程扩展停止词字典-->
	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值