SpringBoot电商项目实战 — ElasticSearch接入实现

2019-08-15 17:32:52 浏览数 (1)

如今在一些中大型网站中,搜索引擎已是必不可少的内容了。首先我们看看搜索引擎到底是什么呢?搜索引擎,就是根据用户需求与一定算法,运用特定策略从互联网检索出制定信息反馈给用户的一门检索技术。搜索引擎依托于多种技术,如网络爬虫技术、检索排序技术、网页处理技术、大数据处理技术、自然语言处理技术等,为信息检索用户提供快速、高相关性的信息服务。搜索引擎技术的核心模块一般包括爬虫、索引、检索和排序等,同时可添加其他一系列辅助模块,以为用户创造更好的网络使用环境。

基于Java的搜索引擎框架,目前市面上很多。如:Lucene、Nutch、Solandra、Solr、ElasticSearch、Compass等,这里具体不一一对比讨论。今天主要说的是ElasticSearch搜索引擎的实现。

ElasticSearch接入实现

ElasticSearch简称es,它是一款基于Lucene框架的分布式搜索引擎,也是一个高度可扩展的开源全文搜索和分析引擎,可以快速的、近实时地对大数据进行存储、搜索和分析,用来支撑复杂的数据搜索需求和企业级应用。并且也是一款为数不多的基于JSON进行索引的搜索引擎。它特别适合在云计算平台上使用。

一、ElasticSearch的安装

我们先进入Linux服务器,然后在/usr/local/下创建elasticsearch,命令如下:

代码语言:javascript复制
cd /usr/local/
mkdir elasticsearch

然后进入elasticsearch目录,下载es。

代码语言:javascript复制
cd elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.1.tar.gz

解压es

代码语言:javascript复制
tar -zxvf elasticsearch-6.8.1.tar.gz

修改配置文件:

代码语言:javascript复制
vim elasticsearch-6.8.1/config/elasticsearch.yml
代码语言:javascript复制
##修改内容
network.host: 192.168.1.101
http.port: 9200

修改/etc/sysctl.conf

代码语言:javascript复制
vim /etc/sysctl.conf
##添加一下内容
vm.max_map_count=262144

使用非root账号启动es服务

代码语言:javascript复制
cd elasticsearch-6.8.1
./bin/elasticsearch -d

测试:

二、ElasticSearch接入实现

pom文件,版本号:2.1.4.RELEASE

代码语言:javascript复制
<!-- 版本号 -->
<spring-elasticsearch.version>2.1.4.RELEASE</spring-elasticsearch.version>
<elasticsearch-client.version>6.6.2</elasticsearch-client.version>
<!-- elasticsearch -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    <version>${spring-elasticsearch.version}</version>
</dependency>
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>${elasticsearch-client.version}</version>
</dependency>

application.properties配置

代码语言:javascript复制
##ES
spring.data.elasticsearch.cluster-name=my_application
spring.data.elasticsearch.cluster-nodes=192.168.1.101:9300
spring.data.elasticsearch.repositories.enabled=true

ES的泛型实体,具体根据自己的业务和所需字段定义

ElasticsearchRepository类

代码语言:javascript复制
package com.lyn.web.elastic;

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Component;

@Component
public interface GoodsEsRepository extends ElasticsearchRepository<GoodsVo,Long> {
}

‍启动类添加如下代码,解决与Netty冲突异常。

System.setProperty("es.set.netty.runtime.available.processors", "false");

ES同步及查询接口

启动项目,测试结果:

项目启动成功后先执行save接口,同步数据库数据到es。然后调用search接口查询。

此刻,Springboot集成ElasticSearch的索引接入已经完成。代码也已同步上传到github,有需要的小伙伴可根据下面获取方式获取源码。

推荐阅读:

SpringBoot电商项目实战 — 商品的SPU/SKU实现

SpringBoot电商项目实战 — 数据库服务化切分

SpringBoot电商项目实战 — Zookeeper的分布式锁实现

SpringBoot电商项目实战 — Redis实现分布式锁

0 人点赞