成品展示:豆瓣租【http://doubanzu.com】【仅供学习参考】
使用前提:
安装jdk, 最低1.8 ,尽量新版本,配置好java_home
第一步:下载
es下载地址:https://www.elastic.co/downloads/past-releases#elasticsearch 选择 8.2.3 版本
ik分词器下载:https://github.com/medcl/elasticsearch-analysis-ik
拼音分词器下载:自己百度一下,类似
第二步: 解压
以windows 版本为例(linux 把windows 配置的打包上去也是可以的,这里不做单独介绍)
1:把 elasticsearch-8.2.3 解压到你想要的盘
2:elasticsearch-8.2.3 里面找到 plugins 文件夹 ,进入,新建文件夹analysis-ik
3:把下载好的ik分词器8.2.3 解压到创建好的文件夹里面
第三步:编辑配置
回到elasticsearch-8.2.3 文件夹,进入config 目录
编辑:elasticsearch.yml 文件
添加:
#跨域
http.cors.enabled: true
http.cors.allow-origin: “*”
#ssl认证 改为false
xpack.security.http.ssl:
enabled: false
keystore.path: certs/http.p12
编辑 jvm.options 文件
#虚拟机参数,默认是4g,我的电脑没有这么大内存,你们可以自行调节
-Xms512m
-Xmx512m
第四步:启动
回到elasticsearch-8.2.3 文件夹,进入 bin 文件夹,启动 elasticsearch.bat
启动失败:可能会提示你jdk 版本过低,或者 找不到java_home ,es_home ,自己上网解决
启动成功:第一次启动成功会出现账户密码,
访问 你的 ip:9200
注意:如果没有记住账户密码,就要 修改 elasticsearch.yml 取消密码验证
进入es 后删除一个授权认证的索引.security-7,再修改需要认证,再重新启动(不懂就百度)
第五步:下载 elasticsearch-head
可以下载安装 elasticsearch-head
也可以使用谷歌浏览器的插件 (推荐快速上手使用):Multi elasticsearch head
好了,es 现在开始就安装完成了
第六步:集成spring boot
java 操作es 有好几种方式
今天介绍使用的是基于 lambda 表达式的 es Client
maven
<!-- ES java api -->
<dependency>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
<version>8.2.3</version>
</dependency>
<dependency>
<groupId>jakarta.json</groupId>
<artifactId>jakarta.json-api</artifactId>
<version>2.0.1</version>
</dependency>
yml
# spring相关配置
spring:
elasticsearch:
rest:
uris: localhost:9200
username: elastic
password: nIFNHw9FyrB7UnW*Rh9p
connection-timeout: 10s
第七步:es crud
import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch._types.SortOrder;
import co.elastic.clients.elasticsearch._types.mapping.Property;
import co.elastic.clients.elasticsearch._types.query_dsl.Query;
import co.elastic.clients.elasticsearch.core.*;
import co.elastic.clients.elasticsearch.core.search.Highlight;
import co.elastic.clients.elasticsearch.core.search.Hit;
import co.elastic.clients.elasticsearch.indices.CreateIndexResponse;
import co.elastic.clients.transport.endpoints.BooleanResponse;
import co.elastic.clients.util.ObjectBuilder;
import com.find.home.common.entity.EsDTO;
import com.find.home.common.entity.EsResDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
/**
* EsClient
*
* @author admin
*/
@Component
@Slf4j
public class EsClient {
/**
* 索引名称
*/
public static final String HOUSE_INDEX = "xxxxx";
@Resource
private ElasticsearchClient client;
/**
* 判断索引是否存在
*
* @return
* @throws Exception
*/
public Boolean isExistsIndex() throws IOException {
BooleanResponse exists = client.indices