springboot与es集成操作-基础篇

这篇具有很好参考价值的文章主要介绍了springboot与es集成操作-基础篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.添加依赖

<!--elasticsearch依赖-->
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
 </dependency>

2.yml中增加es配置

spring
  elasticsearch:
    rest:
      uris: http://127.0.0.1:9200
 

3.索引实体类

@Data
@FieldNameConstants
@AllArgsConstructor
@NoArgsConstructor
@Document(indexName = "index_search")
public class IndexSearch {
    @Id
    private long id;

    @ApiModelProperty(value = "名称")
    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String name;

    @ApiModelProperty(value = "别名")
    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String displayName;

    @ApiModelProperty(value = "分类 1类型 2物质 3省 4市")
    @Field(type = FieldType.Integer)
    private Integer category;

    @ApiModelProperty(value = "时间")
    @Field(type = FieldType.Date, format = DateFormat.basic_date, pattern = "yyyy-MM-dd")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date controlTime;

    @ApiModelProperty(value = "包含隶属")
    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String contain;

    @ApiModelProperty(value = "主要省")
    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String mainProvince;

    @ApiModelProperty(value = "次要省")
    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String secondaryProvince;

    @ApiModelProperty(value = "主要市")
    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String mainCity;

    @ApiModelProperty(value = "次要市")
    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String secondaryCity;

    @ApiModelProperty(value = "其他省")
    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String otherProvince;

    @ApiModelProperty(value = "其他市")
    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String otherCity;

    /*
    定义关键词索引 要完成补全搜索,必须要用到特殊的数据类型completion,
    要汉字拼音都能补全,必须要使用自定义的ik+pinyin分词器
    maxInputLength:设置单个输入的长度,默认为50 UTF-16 代码点*/
    @CompletionField(analyzer = "ik_max_word", searchAnalyzer = "keyword", maxInputLength = 100)
    private Completion completion;

}

4.实现Repository

public interface IndexSearchRepository  extends ElasticsearchRepository<IndexSearch, Long> {

    @Highlight(
            fields = {
                    @HighlightField(name = "name"),
                    @HighlightField(name = "displayName"),
            },
            parameters = @HighlightParameters(preTags = "<strong>",
            postTags = "</strong>", fragmentSize = 500,numberOfFragments= 3))
    SearchPage<IndexSearch> findByNameOrDisplayName(String name,String displayName, Pageable pageable);
}

5.控制器具体实现

分页查询,高亮查询

     @Autowired
    private SubstanceSearchRepository repository;
  //使用es API进行分页高亮查询
    @GetMapping("/listSearch")
    public RestResult<ListPageResult<IndexSearch>> getPageData(@RequestParam String name,
                                                                   @RequestParam(defaultValue = "0") Integer pageNumber,
                                                                   @RequestParam(defaultValue = "10") Integer pageSize) {
        SearchPage<SubstanceSearch> pageData = repository.findByNameOrDisplayName(name, name,PageRequest.of(pageNumber, pageSize));
        try {
            // 得到查询结果返回的内容
            List<SearchHit<IndexSearch>> searchHits = pageData.getContent();
            // 设置一个需要返回的实体类集合
            List<IndexSearch> discussPosts = new ArrayList<>();
            // 遍历返回的内容进行处理
            for (SearchHit<IndexSearch> searchHit : searchHits) {
                // 高亮的内容
                Map<String, List<String>> highLightFields = searchHit.getHighlightFields();
                // 将高亮的内容填充到content中
                searchHit.getContent().setName(highLightFields.get("name") == null ? searchHit.getContent().getName() : highLightFields.get("name").get(0));
                searchHit.getContent().setDisplayName(highLightFields.get("displayName") == null ? searchHit.getContent().getDisplayName() : highLightFields.get("displayName").get(0));

                // 放到实体类中
                discussPosts.add(searchHit.getContent());
            }
            return RestResultHelper.success(new ListPageResult<IndexSearch>(pageData.getSize(), pageData.getNumber(), pageData.getTotalPages(), pageData.getTotalElements(), discussPosts));
        } catch (Exception e) {
            e.printStackTrace();
            return RestResultHelper.error();
        }
    }

自动补全

    @Autowired
    private ElasticsearchRestTemplate restTemplate;
 /**
     * 自动补全方法
     **/
    @GetMapping("/suggest")
    public RestResult<List<String>> suggest(String prefix) {
        List<String> results = new ArrayList<>();
        CompletionSuggestionBuilder completionSuggestionBuilder = new CompletionSuggestionBuilder(IndexSearch.Fields.completion)
                .prefix(prefix)
                .skipDuplicates(true).size(10);
        SuggestBuilder suggestBuilder = new SuggestBuilder()
                .addSuggestion("name_suggest", completionSuggestionBuilder);

        SearchResponse response = restTemplate.suggest(suggestBuilder, IndexCoordinates.of("index_search"));
        Suggest suggest = response.getSuggest();
        Suggest.Suggestion suggestion = suggest.getSuggestion("name_suggest");
        List<CompletionSuggestion.Entry> entries = suggestion.getEntries();
        entries.forEach(entry -> {
            List<CompletionSuggestion.Entry.Option> options = entry.getOptions();
            options.forEach(option -> {
                results.add(option.getText().toString());
            });
        });
        return RestResultHelper.success(results);
    }

添加文档数据

  //添加数据
       @Autowired
    private SubstanceSearchRepository repository;
    
    @GetMapping("/insert")
    public void addData() throws Exception {
        List<IndexSearch> orderDocs = new ArrayList<>();

        for (int i = 0; i < 15; i++) {
            String title = "类型";
            suggestList = new ArrayList<>();
            title += i;
            suggestList.add(title); //可以把多个内容作为suggest的数据源
            suggestList.add("别名" + i);
            Completion suggest = new Completion(suggestList.toArray(new String[suggestList.size()]));
            IndexSearch orderDoc = new IndexSearch(i, title, title, 1, new Date(), "隶属", "主要省", "次要省", "主要市", "次要市",  "其他省", "其他市",suggest);
            orderDocs.add(orderDoc);
        }
        repository.saveAll(orderDocs);
    }

springboot集成es,Java,elasticsearch,spring boot,java文章来源地址https://www.toymoban.com/news/detail-552279.html

到了这里,关于springboot与es集成操作-基础篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Elasticsearch学习笔记五】es常用的JAVA API、es整合SpringBoot项目中使用、利用JAVA代码操作es、RestHighLevelClient客户端对象

    目录 一、Maven项目集成Easticsearch 1)客户端对象 2)索引操作 3)文档操作 4)高级查询 二、springboot项目集成Spring Data操作Elasticsearch 1)pom文件 2)yaml 3)数据实体类 4)配置类 5)Dao数据访问对象 6)索引操作 7)文档操作 8)文档搜索 三、springboot项目集成bboss操作elasticsearch

    2023年04月09日
    浏览(51)
  • Java SpringBoot API 实现ES(Elasticsearch)搜索引擎的一系列操作(超详细)(模拟数据库操作)

    小编使用的是elasticsearch-7.3.2 基础说明: 启动:进入elasticsearch-7.3.2/bin目录,双击elasticsearch.bat进行启动,当出现一下界面说明,启动成功。也可以访问http://localhost:9200/ 启动ES管理:进入elasticsearch-head-master文件夹,然后进入cmd命令界面,输入npm run start 即可启动。访问http

    2024年02月04日
    浏览(57)
  • elasticSearch集群 springboot集成es 完全解析

    #编写compose.yml配置文件 #每个节点都创建一个elasticsearch.yml文件 用到的命令: systemctl start docker docker-compose up es和kibana版本必须一样 environment:配置容器内的环境变量 networks:创建一个名为elastic的局域网,让各节点以及kibana,es-head相互联系 network.host: 0.0.0.0:意为监听一切地址,可

    2024年02月03日
    浏览(45)
  • ElasticSearch | SpringBoot集成ES异常以及处理方法

    异常 Elasticsearch exception Elasticsearch exception [type=cluster_block_exception, reason=index [video_struct_vehicle] blocked by: [FORBIDDEN/12/index read-only / allow delete (api)]; 产生原因 服务磁盘内存不足,导致无法删除,所有索引都变成了只读 read-only状态。 一旦在存储超过95%的磁盘中的节点上分配了一个

    2024年02月13日
    浏览(40)
  • spring boot +springboot集成es7.9.1+canal同步到es

    未经许可,请勿转载。 其实大部分的代码是来源于 参考资料来源 的 主要代码实现 ,我只是在他的基础上增加自定义注解,自定义分词器等。需要看详细源码的可以去看 主要代码实现 ,结合我的来使用。 有人会问为什么需要自定义注解,因为elasticsearch7.6 索引将去除type 没

    2023年04月11日
    浏览(83)
  • es Elasticsearch 六 java api spirngboot 集成es

    目录 Java restApi Springboot 集成es 新增-同步 新增-异步 增删改查流程 _bulk 批量操作 新增-同步 新增-异步 增删改查流程 创建请求、2.执行、3.查看返回结果     _bulk 批量操作 ok 持续更新

    2024年02月10日
    浏览(56)
  • spring boot集成Elasticsearch-SpringBoot(25)

      搜索引擎(search engine )通常意义上是指:根据特定策略,运用特定的爬虫程序从互联网上搜集信息,然后对信息进行处理后,为用户提供检索服务,将检索到的相关信息展示给用户的系统。   而我们讲解的是捜索的索引和检索,不涉及爬虫程序的内容爬取。大部分公司

    2023年04月09日
    浏览(113)
  • 项目中使用es(一):使用springboot操作elasticsearch

    写在前面 对于elasticsearch的搭建,前面写了一篇文章有简单描述如何搭建es,本次主要介绍如何在项目里使用,主要使用ElasticsearchRepository和ElasticsearchRestTemplate操作es。 搭建项目环境和选择合适版本 首先选择合适的项目组件版本,因为es版本和springboot版本有对应,如果不合适会

    2024年02月08日
    浏览(38)
  • springboot操作ES之ElasticSearch_EasyEs

    前置环境 es:7.x springboot:2.6.0 easyes:1.0.2 1.导入依赖 2.配置文件 3.新建实体类 Document Comment User 4.启动类上面加EsMapperScan 5.最后测试各种操作

    2024年02月12日
    浏览(46)
  • 【SpringBoot笔记28】SpringBoot集成ES数据库之操作doc文档(创建、更新、删除、查询)

    这篇文章,主要介绍SpringBoot集成ES数据库之操作doc文档(创建、更新、删除、查询)。 目录 一、SpringBoot操作ES文档数据 1.1、创建文档 1.2、更新文档 1.3、删除文档

    2024年02月08日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包