springboot集成elasticsearch,通过实体类创建索引,实现搜索提示补全功能

文章目录

  • springboot集成elasticsearch,通过实体类创建索引,实现搜索提示补全功能
  • 一、引入pom依赖
  • 二、修改yml文件
  • 三、创建实体类GoodsDoc.java
  • 四、创建GoodsMapper.java
  • 五、创建GoodsController.java
  • 六、结果
  • 总结

注:在此之前需要下载elasticsearch以及拼音分词器。可以查看这篇文章,免费下载,下载完直接解压就行。https://download.csdn.net/download/weixin_47874230/86514890

一、引入pom依赖

spring-data-elasticsearch版本需要与springboot版本对应,此处使用springboot版本为2.2.13.RELEASE

        <dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-elasticsearch</artifactId><version>3.2.12.RELEASE</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>

二、修改yml文件

server:port: 8080
spring:elasticsearch:rest:uris:- http://localhost:9200

三、创建实体类GoodsDoc.java

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.*;
import org.springframework.data.elasticsearch.core.completion.Completion;
import java.util.Date;@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(indexName = "goods", shards = 1, replicas = 0)  //type = "_doc" ,
public class GoodsDoc {@Id@Field(type = FieldType.Keyword)private String id;@CompletionField(analyzer = "ik_smart", searchAnalyzer = "ik_smart", maxInputLength = 100)private Completion title;@Field(type = FieldType.Text)       //测试用,当name和title值相同时,检索结果区别,title查出结果数据较少,name为正常查询private String name;@Field(type = FieldType.Float)private float price;@Field(type = FieldType.Text)private String desc;@Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss")@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private Date createdTime;@Field(type = FieldType.Date, format = DateFormat.custom, pattern = "yyyy-MM-dd HH:mm:ss")@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private Date modifiedTime;
}

四、创建GoodsMapper.java

import com.example.elasticsearch7demo.entity.GoodsDoc;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;@Repository
public interface GoodsMapper extends ElasticsearchRepository<GoodsDoc, String> {}

五、创建GoodsController.java

包含创建索引,添加数据,测试功能

import com.example.elasticsearch7demo.mapper.GoodsMapper;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.search.suggest.Suggest;
import org.elasticsearch.search.suggest.SuggestBuilder;
import org.elasticsearch.search.suggest.SuggestBuilders;
import org.elasticsearch.search.suggest.completion.CompletionSuggestionBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.completion.Completion;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;@RestController
@RequestMapping
public class GoodsController {@Autowiredprivate ElasticsearchRestTemplate restTemplate;@Autowiredprivate GoodsMapper goodsMapper;//创建索引和映射@GetMapping("/create")public void testCreateIndex(){restTemplate.createIndex(GoodsDoc.class);restTemplate.putMapping(GoodsDoc.class);}//添加数据@GetMapping("/insert")public void addData() throws Exception {List<GoodsDoc> orderDocs = new ArrayList<>();List<String> suggestList =  new ArrayList<>();String title = "笔记本电脑";suggestList.add(title); //可以把多个内容作为suggest的数据源Completion suggest = new Completion(suggestList.toArray(new String[suggestList.size()]));GoodsDoc orderDoc = new GoodsDoc("1", suggest,title, 100,"笔记本电脑非常方便",new Date(),new Date());orderDocs.add(orderDoc);suggestList =  new ArrayList<>();title = "笔记本";suggestList.add(title);suggest = new Completion(suggestList.toArray(new String[suggestList.size()]));orderDoc = new GoodsDoc("2", suggest,title, 100,"笔记本电脑非常方便",new Date(),new Date());orderDocs.add(orderDoc);suggestList =  new ArrayList<>();title = "笔记本支架";suggestList.add(title);suggest = new Completion(suggestList.toArray(new String[suggestList.size()]));orderDoc = new GoodsDoc("3",  suggest,title, 100,"笔记本电脑非常方便",new Date(),new Date());orderDocs.add(orderDoc);suggestList =  new ArrayList<>();title = "笔记本内存条";suggestList.add(title);suggest = new Completion(suggestList.toArray(new String[suggestList.size()]));orderDoc = new GoodsDoc("4",  suggest,title, 100,"笔记本电脑非常方便",new Date(),new Date());orderDocs.add(orderDoc);suggestList =  new ArrayList<>();title = "联想笔记本";suggestList.add(title);suggest = new Completion(suggestList.toArray(new String[suggestList.size()]));orderDoc = new GoodsDoc("5",  suggest,title, 100,"笔记本电脑非常方便",new Date(),new Date());orderDocs.add(orderDoc);suggestList =  new ArrayList<>();title = "华硕笔记本";suggestList.add(title);suggest = new Completion(suggestList.toArray(new String[suggestList.size()]));orderDoc = new GoodsDoc("6",  suggest,title, 100,"笔记本电脑非常方便",new Date(),new Date());orderDocs.add(orderDoc);suggestList =  new ArrayList<>();title = "联想台式机";suggestList.add(title);suggest = new Completion(suggestList.toArray(new String[suggestList.size()]));orderDoc = new GoodsDoc("7",  suggest,title, 100,"笔记本电脑非常方便",new Date(),new Date());orderDocs.add(orderDoc);suggestList =  new ArrayList<>();title = "笔记本电脑是联想牌子的";suggestList.add(title);suggest = new Completion(suggestList.toArray(new String[suggestList.size()]));orderDoc = new GoodsDoc("8",  suggest,title, 100,"笔记本电脑非常方便",new Date(),new Date());orderDocs.add(orderDoc);suggestList =  new ArrayList<>();title = "你喜欢什么牌子的笔记本?";suggestList.add(title);suggest = new Completion(suggestList.toArray(new String[suggestList.size()]));orderDoc = new GoodsDoc("9", suggest,title, 100,"笔记本电脑非常方便",new Date(),new Date());orderDocs.add(orderDoc);goodsMapper.saveAll(orderDocs);}//测试@GetMapping("/test")public List<String> search(@RequestParam("keywords") String keywords){// 使用suggest进行标题联想CompletionSuggestionBuilder suggest = SuggestBuilders.completionSuggestion("title")//根据什么前缀来联想
//                .prefix("笔记本").prefix(keywords)// 跳过重复过滤.skipDuplicates(true)// 匹配数量.size(10);SuggestBuilder suggestBuilder = new SuggestBuilder();suggestBuilder.addSuggestion("title-suggest",suggest);//执行查询SearchResponse suggestResp = restTemplate.suggest(suggestBuilder, GoodsDoc.class);//拿到Suggest结果Suggest.Suggestion<? extends Suggest.Suggestion.Entry<? extends Suggest.Suggestion.Entry.Option>> orderSuggest = suggestResp.getSuggest().getSuggestion("title-suggest");// 处理返回结果List<String> suggests = orderSuggest.getEntries().stream().map(x -> x.getOptions().stream().map(y->y.getText().toString()).collect(Collectors.toList())).findFirst().get();// 输出内容for (String str : suggests) {System.out.println("自动补全 = " + str);}return suggests;}}

六、结果


总结

 以上就是记录的es实体类的创建以及搜索提示补全功能内容。

springboot集成elasticsearch,实现搜索提示补全功能相关推荐

  1. springboot——集成elasticsearch进行搜索并高亮关键词

    目录 1.elasticsearch概述 3.springboot集成elasticsearch 4.实现搜索并高亮关键词 1.elasticsearch概述 (1)是什么: Elasticsearc ...

  2. SpringBoot 集成 ElasticSearch 全文搜索(步骤非常的详细)

    目录 一.pom.xml配置 二.项目代码集成示例 Yml配置 存储映射实体 @Document注解 @Field注解 创建Repository 三.安装ES 下载安装ES 测试默认分词 四.Ik分词 ...

  3. springboot集成Elasticsearch实现各种搜索功能

    springboot集成Elasticsearch各类搜索功能实现 springboot集成Elasticsearch使用completion suggest实现自动关键字补全 建立学生的索引和映射: ...

  4. 基层教学组织评估系统5_系统管理员数据维护模块功能完善,优化教学组织名称的输入提示补全,项目打包部署篇

    目录 一.完善 二.项目打包 三.部署 四.报错解决 五.数据初始 一.完善 系统管理员数据维护模块功能完善 优化教学组织名称的输入提示补全 数据对应格式bug修复 1.系统管理员数据维护模块功能完善 ...

  5. Elasticsearch 分布式搜索引擎 -- 自动补全(拼音分词器、自定义分词器、自动补全查询、实现搜索框自动补全)

    文章目录 1. 自动补全 1.1 拼音分词器 1.2.1 自定义分词器 1.2.2 小结 1.2 自动补全 1.3 实现酒店搜索框自动补全 1.3.1 修改酒店映射结构 1.3.2 修改HotelDo ...

  6. ES 7.X 做类百度搜索,进行搜索自动补全和热搜词及拼音功能实现

    文章目录 前言 一.如何使用ES做类似百度的检索? 二.全文检索自动补齐 1.创建索引 2.添加数据 3.高级检索 三 热搜词 1.思路 2.DSL语句 3.java代码实现 四 拼音补全 1.DSL ...

  7. 【SpringBoot高级篇】SpringBoot集成Elasticsearch搜索引擎

    [SpringBoot高级篇]SpringBoot集成Elasticsearch搜索引擎 1. 什么是Elasticsearch? 2. 安装并运行Elasticsearch 2.1 拉取镜像 2.2 ...

  8. Atom JS 代码智能提示补全

    JS 代码智能提示补全 题外话 官方正式版虽然内置了.autocomplete-plus:最为明显的一个功能就是记忆你已经输入过的名称进行匹配: 但是针对于某些语言来说,还是有些不足的-.其中 JS ...

  9. python sublime 提示补全_【原创】Sublime+Verilator建立强大的verilog编写环境

    前言(没必要看) --子曰:工欲善其事,必先利其器. 写个水文不容易,转载请注明,谢谢了... 在写这篇水文之前,我一直在用UE(UtralEdite)编写Verilog代码,使用习惯了之后,感觉很方 ...

最新文章

  1. 登上更高峰!颜水成、程明明团队开源ViP,引入三维信息编码机制,无需卷积与注意力...
  2. 线性代数学习资料汇编
  3. nodejs模块导入导出
  4. 银行加息前存的定期会随着加息吗?
  5. __declspec(dllexport)、__declspec(dllimport)详解
  6. mysql关联表分页查询_MySQL一对多分页查询-主表关联表条件查询问题
  7. PHP裂变红包源码,php版本微信裂变红包api详解
  8. 什么是软件项目管理?
  9. jeecms系统使用介绍——通过二次开发实现对word、pdf、txt等上传附件的全文检索
  10. Minimum supported Gradle version is 6.5.1. Current version is 6.1.1.
  11. php调用pdf虚拟打印机,window_在Win7系统中怎么安装PDF彩色虚拟打印机?,前面说过,Word不能直接将文档 - phpStudy...
  12. Ubuntu 安装package提示依赖: XXX 但是它将不会被安装 解决方法
  13. log4j按日期和文件大小生成日志文件
  14. StartSSL免费SSL证书成功申请-HTTPS让访问网站更安全
  15. 数据结构上机实验6.29
  16. attiny13a程序实例_如何使用Arduino IDE编程ATTINY13/ATTINY13A单片机
  17. 关于uni-app手机nfc开启、读取、写入功能
  18. 鼠标光标变成了一个点
  19. Java设计模式之创建者模式
  20. 惠普服务器-ILO使用

热门文章

  1. 创业路上之谢谢戴志康
  2. java double 取余_java中double除法和取余的若干注意
  3. 微信支付的简单使用以及前端的显示
  4. 美服fgo显示服务器异常,FGO日服美服错误解析 日服美服错误代码汇总
  5. 工作10年,悟出的50条职场道理
  6. 前端——品优购项目(html+css)
  7. 计算机教师笑话,笑话段子电脑学家
  8. C4D随笔录 —— “布尔”生成器运用
  9. Sentence-Bert中pooling的理解
  10. 统信UOS(1050)专业版安装VirtualBox教程