注解式elasticsearch+SpringBoot(附分布式配置)

注解式elasticsearch+SpringBoot(附分布式配置)前言:以前使用的是RestHighLevelClient客户端,使用起来一大堆的类相互嵌套,特别是agg操作,代码十分惨烈。架构:使用方式与mybatis类似,采用xml的形式,将dsl与代码分离。示例用了swagger2和lombok。需知:必须学会DSL语法(看半小时差不多就会了吧)。依赖:<dependency><group…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

前言:以前使用的是Rest High Level Client客户端,使用起来一大堆的类相互嵌套,特别是agg操作,代码十分惨烈。

架构:使用方式与mybatis类似,采用xml的形式,将dsl与代码分离。示例用了swagger2和lombok。

需知:必须学会DSL语法(看半小时差不多就会了吧)。


依赖:

<dependency>
            <groupId>com.bbossgroups.plugins</groupId>
            <artifactId>bboss-elasticsearch-spring-boot-starter</artifactId>
            <version>5.9.5</version>
        </dependency>

Jetbrains全家桶1年46,售后保障稳定

配置:

server:
  port: 3000
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://xxxxxxxxxxxxx/xxxxx?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: **********
  #      type: com.alibaba.druid.pool.DruidDataSource
  elasticsearch:
    bboss:
      elasticUser: elastic
      elasticPassword: changeme
      elasticsearch:
        rest:
          hostNames: xxx.xxx.xxx.xxx:9200
          ##hostNames: 192.168.8.25:9200,192.168.8.26:9200,192.168.8.27:9200  ##集群地址配置
        dateFormat: yyyy.MM.dd
        timeZone: Asia/Shanghai
        ttl: 2d
        showTemplate: true
        discoverHost: false
      dslfile:
        refreshInterval: -1
      http:
        timeoutConnection: 5000
        timeoutSocket: 5000
        connectionRequestTimeout: 5000
        retryTime: 1
        maxLineLength: -1
        maxHeaderCount: 200
        maxTotal: 400
        defaultMaxPerRoute: 200
        soReuseAddress: false
        soKeepAlive: false
        timeToLive: 3600000
        keepAlive: 3600000
        keystore:
        keyPassword:
        hostnameVerifier:

使用示例:

实体类:

import com.frameworkset.orm.annotation.ESId;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * TODO
 *
 * @author sunziwen
 * @version 1.0
 * @date 2019/12/12 14:53
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Person{
    @ESId
    private Integer personId;
    private String name;
    private Integer age;
    private String introduction;
}

测试:

package com.example.layer.controller;

import com.example.layer.entity.Person;
import io.swagger.annotations.ApiOperation;
import org.frameworkset.elasticsearch.boot.BBossESStarter;
import org.frameworkset.elasticsearch.client.ClientInterface;
import org.frameworkset.elasticsearch.entity.ESDatas;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * TODO
 *
 * @author sunziwen
 * @version 1.0
 * @date 2019/12/12 13:32
 **/
@RestController
public class TestController {
    private final BBossESStarter bBossESStarter;

    public TestController(BBossESStarter bBossESStarter) {
        this.bBossESStarter = bBossESStarter;
    }

    @PostMapping("test_create")
    @ApiOperation("创建索引")
    public Object create() {
        ClientInterface restClient = bBossESStarter.getConfigRestClient("elasticsearch/person.xml");
        return restClient.createIndiceMapping("person", "createPersonIndice");
    }

    @PostMapping("test_add")
    @ApiOperation("添加文档")
    public Object add() {
        ClientInterface restClient = bBossESStarter.getRestClient();
        Person person = Person.builder()
                              .personId(-1)
                              .name("张三丰")
                              .age(100)
                              .introduction("武当创始人")
                              .build();
        return restClient.addDocument("person", "person", person, "refresh");
    }

    @PostMapping("test_adds")
    @ApiOperation("批量添加文档")
    public Object adds() {
        ClientInterface restClient = bBossESStarter.getRestClient();
        ArrayList<Person> people = new ArrayList<>();
        for (int i = 0; i < 1000; i++) {
            Person person = Person.builder()
                                  .personId(i)
                                  .name("张三丰" + i)
                                  .age(100 + i * 2)
                                  .introduction("武当创始人" + i * 3)
                                  .build();
            people.add(person);
        }
        return restClient.addDocuments("person", "person", people, "refresh");
    }

    @PostMapping("test_getById")
    @ApiOperation("Id获取文档")
    public Object getById(@RequestParam Integer id) {
        ClientInterface restClient = bBossESStarter.getRestClient();
        return restClient.getDocument("person", "person", id + "", Person.class);
    }

    @PostMapping("test_search")
    @ApiOperation("检索")
    public Object search() {
        ClientInterface restClient = bBossESStarter.getConfigRestClient("elasticsearch/person.xml");
        HashMap<String, Object> params = new HashMap<>(2);
        params.put("min", 100);
        params.put("max", 300);
        params.put("size", 100);
        ESDatas<Person> searchRange = restClient.searchList("person/_search", "searchRange", params, Person.class);
        return searchRange;
    }
}

XML:

<properties>
    <property name="createPersonIndice">
        <![CDATA[{
            "settings": {
                "number_of_shards": 1,
                "index.refresh_interval": "5s"
            },
            "mappings": {
                "person": {
                    "properties": {
                        "id":{
                            "type":"long"
                        },
                        "name": {
                            "type": "keyword"
                        },
                        "age":{
                            "type":"long"
                        },
                        "introduction": {
                            "type": "text"
                        }
                    }
                }
            }
        }]]>
    </property>
    <property name="searchRange">
        <![CDATA[{
            "query": {
                "bool": {
                    "filter": [
                        {
                            "range": {
                                "age": {
                                    "gte": #[min],
                                    "lt": #[max]
                                }
                            }
                        }
                    ]
                }
            },
            "size":#[size]
        }]]>

    </property>
</properties>

分布式配置:

这里为了方便懒得建分布式项目了。在启动时从分布式配置中心拿到相应的配置后…(这里我直接写死了)

注解式elasticsearch+SpringBoot(附分布式配置)

有疑问家sunziwen3366备注csdn

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215466.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 复习一周,京东+百度一面,不小心都拿了Offer

    复习一周,京东+百度一面,不小心都拿了Offer京东和百度一面都问了啥,面试官百般刁难,可惜我全会。

    2022年5月31日
    29
  • 轻松搞懂【TF-IDF、word2vec、svm、cnn、textcnn、bilstm、cnn+bilstm、bilstm+attention实现】英文长文本分类[通俗易懂]

    轻松搞懂【TF-IDF、word2vec、svm、cnn、textcnn、bilstm、cnn+bilstm、bilstm+attention实现】英文长文本分类[通俗易懂]项目来源:https://www.kaggle.com/c/word2vec-nlp-tutorial/之前我写过几篇博客:就这?word2vec+BiLSTM、TextCNN、CNN+BiLSTM、BiLSTM+Attention实现中英文情感分类代码详解就这?word2vec+SVM(支持向量机)实现中英文情感分类代码详解这两篇博客主要是基于中文进行情感分类的,那么本篇博客,我会以这个kaggle项目来介绍如何实现英文长文本情感分类。1实验数据本次数据集来源于kaggle项目“Bago

    2022年6月28日
    30
  • Pycharm 开发环境设置-汇总「建议收藏」

    Pycharm 开发环境设置-汇总「建议收藏」声明:大部分设置来此网络资源,部分来自个人总结。部分资源来自连接如下:1. https://www.cnblogs.com/zhongyuping/p/6417071.html Pycharm验证来此:2018版本,Unbunt16.04环境一 创建文件时自动添加头文件1.1python创建设置找到该路径并添加以下信息File-&gt;settings-&gt;Ed…

    2022年8月27日
    2
  • 字符串常量池、class常量池和运行时常量池「建议收藏」

    字符串常量池、class常量池和运行时常量池「建议收藏」 原文链接:http://tangxman.github.io/2015/07/27/the-difference-of-java-string-pool/                 在java的内存分配中,经常听到很多关于常量池的描述,我开始看的时候也是看的很模糊,网上五花八门的说法简直太多了,最后查阅各种资料,终于算是差不多理清了,很多网上说法都有问题,笔者尝试着…

    2025年10月16日
    3
  • Loadrunner11激活成功教程详解[通俗易懂]

    Loadrunner11激活成功教程详解[通俗易懂]使用说明:要以管理员的身份运行1、正常安装完LR11后。然后双击deletelicense.exe2、然后解压替换其中的2个DLL文件拷贝到”C:\ProgramFiles\HP\LoadRunner\bin\”下替换原有文件3、进入LR,输入以上的序列号即可global-100:AEACFSJI-YASEKJJKEAHJD-BCLBRweb-10000

    2022年7月22日
    52
  • 用java代码实现九九乘法表

    用java代码实现九九乘法表分析乘法表发现,整体有九行,第一行是一列,第二行是两列,第三行三列…..第九行对应有九列,所以它的行数对应就有多少列,这样我们可以通过借助行数来控制它的列数,以此来实现乘法表的打印。具体代码实现:for循环publicclassMultTable{ publicstaticvoidmain(String[]args){ //此处调用九九乘法表方法实现打印 multMethod(); } publicstaticvoidmultMethod(){ /

    2022年7月9日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号