刷新插件 , 集群变成绿色 。
设置用户名密码
# vim elasticsearch.yml http.cors.enabled: true http.cors.allow-origin: "*" http.cors.allow-headers: Authorization xpack.security.enabled: true xpack.security.transport.ssl.enabled: true 复制代码
docker exec -it fa41ca453d06 /bin/bash ./bin/elasticsearch-setup-passwords interactive ## 输入密码 复制代码
文章插图
设置成功后 , 用户名为elastic , 密码为设置的值 , 同时es里多了一个索引:.security-7
文章插图
安装分词器
下载 , 版本一定要和es的对应 , 安装时注意 , 并不是一解压就好了 。
首先查看插件的名字 , 解压后打开plugin-descriptor.properties文件 , 查看插件的名字 , 然后在挂载的plugins文件夹下新建文件夹 , 以插件的名字命名 。
再将解压出来文件全部移动到插件名文件夹下才可以 。
文章插图
重启ES , 查看日志
docker restart fa41ca453d06 docker logs fa41ca453d06 复制代码
至此 , ES服务端部署完成 , 接下来就是基于SpringBoot操作ES 。
Java客户端
spring-boot-starter-data-elasticsearch是比较好用的一个elasticsearch客户端 , 它内部会引入spring-data-elasticsearch 。
版本对应关系
如果使用spring-boot-starter-data-elasticsearch , 需要调整spring-boot的版本才起作用 。
文章插图
有下边这几种方法操作ElasticSearch:
- ElasticsearchRepository(传统的方法 , 可以使用)
- ElasticsearchRestTemplate(推荐使用 。基于RestHighLevelClient)
- ElasticsearchTemplate(ES7中废弃 , 不建议使用 。基于TransportClient)
- RestHighLevelClient(推荐度低于ElasticsearchRestTemplate , 因为API不够高级)
- TransportClient(ES7中废弃 , 不建议使用)
案例代码
配置
org.springframework.boot spring-boot-starter-data-elasticsearch 2.7.7 复制代码
spring: elasticsearch: rest: uris: 101.43.138.173:9200 # 多个用逗号隔开 # username: ---用户名 # password: ---密码 connection-timeout: 1000 # 连接超时时间 read-timeout: 1000 # 读取超时时间 复制代码
索引类
// 省略部分字段 @Data @Document(indexName = "code_note") @Setting(replicas = 0) // 副本为0 , 单机模式 @NoArgsConstructor @AllArgsConstructor @Builder public class EsCodeNote { @Id private Long id; /** * md文本 */ @Field(type = FieldType.Text, analyzer = "ik_max_word") private String mdContent; /** * 分类 */ @Field(type = FieldType.Keyword) private String category; /** * 创建时间 */ @Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis") private Date createTime; } 复制代码
mapper类
@Repository public interface CodeNoteRepository extends ElasticsearchRepository { } 复制代码
service层
@Service @Slf4j @RequiredArgsConstructor public class CodeNoteService { private final ElasticsearchRestTemplate esRestTemplate; private final CodeNoteRepository codeNoteRepository; private final CodeNoteMapper noteMapper; public Object saveNoteToEs(EsCodeNote codeNote){ return codeNoteRepository.save(codeNote); } public void saveNotesToEs(List codeNotes){ codeNoteRepository.saveAll(codeNotes); } public List getFromEsByContent(String content) { //高亮 String preTag = ""; String postTag = ""; boolQueryBuilder boolQueryBuilder = new BoolQueryBuilder().should(new MatchQueryBuilder("mdContent", content)); Query query = new NativeSearchQueryBuilder() .withQuery(boolQueryBuilder) .withHighlightFields(new HighlightBuilder.Field("mdContent").preTags(preTag).postTags(postTag)).build(); // Query query1 = new NativeSearchQueryBuilder() // .withQuery(QueryBuilders.multiMatchQuery(content,"content","content.inner")).build(); // .withQuery(QueryBuilders.queryStringQuery(content)).build(); SearchHits search = esRestTemplate.search(query, EsCodeNote.class); return search.stream().map(SearchHit::getContent).collect(Collectors.toList()); } public void init() { List codeNotes = noteMapper.selectList(Wrappers.lambdaQuery(CodeNote.class)); List esCodeNotes = BeanUtil.copyToList(codeNotes, EsCodeNote.class); this.saveNotesToEs(esCodeNotes); } } 复制代码
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 沉香|和田玉黄玉仿古“兽面玉带钩”!刚性十足的若羌黄口料算不算好玉?
- 生肖|下一季度,3个生肖的职场一片光明,有潜力实现目标和职业发展
- 穿衣搭配|陈数厉害了,穿的裤子粗如“水桶”也不显胖,仿佛走路都带风
- 聊聊关于RoCE技术三种实现及应用
- 一文看懂Redisson分布式锁的Watchdog机制源码实现
- MySQL利用int类型高性能实现签到活动
- 深度剖析 Redis 九种数据结构实现原理
- 微信电脑版实现多开,亲测有效
- 抖音小店的真实现状是怎样的?这个项目还能做吗?
- 网络程序计时器通常用啥实现?