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