SpringBoot——集成全文检索引擎ElasticSearch

一晃小半年过去了,好几个月没写过博客了。其实手早就痒的不行了,终于在这个天时地利人和的下午,有点时间写点东西了。对于全文检索这块,自己之前只了解过luncence,但也仅仅是了解,只知道其大概的原理,但一直没有机会使用。最近的项目终于有机会能用全文检索了,于是就霹雳吧啦查了一顿资料,最后决定了使用luncence的升级版——elasticsearch(以下简称es,这名字太长了,手疼)。

在这个万物基于springboot的时代,要在项目中使用es其实是件很容易的事。而且在springboot的官方手册中有完整的集成es的章节。不过,纸上学来终觉浅,绝知此事要躬行,什么事都得自己试试才知道。

这里插一下es的原理。es中使用了倒排索引的概念,就是把一大段文本按照一定的规则进行分词,然后将每个词在整个文本中出现的位置、次数等都记录下来,并将所有的词进行排序和索引。利用这样一种存储结构就能很容易的判断一大段文本中是否包含某个关键字了。

es的安装

我现在是越来越懒了,以前钟爱手动下载压缩包,手动解压,手动配置,手动启动程序,而现在呢,我就喜欢yum,能用一条命令搞定的事情,绝不用两条命令。所以es的安装我也是用yum搞定的(以下步骤都是基于centos7的)。

  1. 首先配置yum仓库,在/etc/yum.repos.d/下创建个文件名为elasticsearch.repo,并编辑内容如下:
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

如果后续安装失败可以考虑把gpgcheck=1改为gpgcheck=0

  1. 安装es
    yum install elasticsearch -y
  2. 启动es
    systemctl start elasticsearch
  3. 配置允许远程访问。编辑/etc/elasticsearch/elasticsearch.yml文件,找到network.host这一项,将其改为network.host: 0.0.0.0 ,注意不要少冒号后的空格。
  4. 配置es,允许跨域(强烈建议配置此项)。编辑/etc/elasticsearch/elasticsearch.yml文件,在其最后添加如下内容:
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    
  5. 重启es(滑稽):systemctl restart elasticsearch
  6. 使用elasticsearch-head(https://github.com/mobz/elasticsearch-head )连接es,如果看到如下内容,就大功告成了:
    在这里插入图片描述

springboot中集成es

  1. 添加依赖:
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
		</dependency>
  1. 添加数据库连接地址:
    application.properties配置文件中添加spring.data.elasticsearch.cluster-nodes=192.168.1.2:9300
  2. 启用es:在启动类上添加注解:@EnableElasticsearchRepositories(value="com.simon.demo.dao")

在代码中使用es

es有两种使用方式,一种是像springdata那样,编写接口;另一种是使用ElasticsearchTemplate

  1. 以接口的形式使用es:
public interface DemoElasticsearchRepository extends ElasticsearchRepository<DemoEntity, String> {
	@Query("{ \"match\" : { \"field1\" : \"?0\" }}")
	public List<DemoEntity> findByText(String text);
}

这里注意几点:

  • 接口要位于com.simon.demo.dao这个路径下(这个路径和EnableElasticsearchRepositories注解遥相呼应)
  • 自定义的接口可以继承ElasticsearchRepository,这样能省不少事
  • 可以使用@Query这种注解来制定查询/修改语句
  1. 使用ElasticsearchTemplate
    在代码的任何地方,都可以@ElasticsearchTemplate,就像这样:
	@Autowired
   ElasticsearchTemplate elasticsearchTemplate;

然后就可以使用ElasticsearchTemplate来执行较为复杂的操作了。

最后有个小细节要注意下,程序中都是用的9300端口连接的es,但在elasticsearch-head都是用9200端口(9200是rest端口)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值