草庐IT

Springboot集成elasticsearch7

evil_lrn 2024-01-21 原文

之前开发用的elasticsearch 6,由于媳妇公司最近要使用elasticsearch7,所以写了一个demo。

发现elasticsearch6和7还是有一些区别的。

言归正传。本次使用的es版本是7.13.1版本,安装了ik分词器插件,这里省略了安装过程,如果就是想跑demo直接下载windows版本的,干净又卫生。

先看一下springboot支持的版本。这里随便选了2.5.9版本的springboot

引入相关jar包,既然有springboot-starter肯定用他的

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

按照之前开发6的经验直接配置文件添加

 卧槽。竟然过时了。不慌,还好是springboot自己的东西。没办法,翻一翻自动装配类找找感觉。

 

 看到propereties了。看来离胜利不远了再往下看

 

 卧槽。这不都帮我做完了吗。不愧是springboot。懒人最爱。那就配置上直接用。开始写demo

#Elasticsearch 配置
spring.elasticsearch.rest.uris=http://127.0.0.1:9200
spring.elasticsearch.rest.username=elastic
spring.elasticsearch.rest.password=tongyu1956125

 创建实体类,这里和mybatis-plus用一个实体类,@Document标签不懂的百度吧。这里面和6还是有差别的。es6以前支持多个type,es6只支持1个type,es7已经移除type了。

@Data
@Document(indexName = "rm_policy_publication",replicas = 1,shards = 5)
public class RmPolicyPublication extends Model<RmPolicyPublication> {

    private static final long serialVersionUID = 1L;

    /**
     * id
     */
    @Field(type = FieldType.Keyword)
    @TableId(type = IdType.ID_WORKER_STR)
    private String id;

    /**
     * 标题
     */
    @Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
    private String title;

    /**
     * 流水号
     */
    @Field(type = FieldType.Keyword) // 这个不分词 可以用于关键字查询  具体哪个需要分词 哪个不分词 你要自己确定
    private String serialNumber;

    /**
     * 发文字号
     */
    @Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
    private String policyNumber;

    /**
     * 效力级别(0:中央级,1:国务院级,2:部委级,3:部委司局和直属事业单位级,4:省(直辖市、计划单列市)级,5:省(直辖市、计划单列市)属事业单位级,6:地市级,7:地市所属事业单位级,8:其他)
     */
    @Field(type = FieldType.Auto)
    private String effectiveLevel;

    /**
     * 效力级别id
     */
    @Field(type = FieldType.Auto)
    private Integer effectiveLevelId;

    /**
     * 省份
     */
    @Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
    private String province;

    /**
     * 时效性(0:无有效期限,正在执行有效,1:有有效期限,正在执行有效,2:已废止)
     */
    @Field(type = FieldType.Auto)
    private String timely;
    @Field(type = FieldType.Auto)
    private Integer timelyId;

    /**
     * 发文单位分类(废弃)
     */
    private String issuerClass;

    /**
     * 公布机关
     */
    @Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
    private String issuer;

    private Integer issuerId;

    /**
     * 协同发文单位
     */
    @Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
    private String assIssuer;
    @Field(type = FieldType.Auto)
    private Integer assIssuerId;

    /**
     * 公布日期
     */
    @Field(type = FieldType.Date)
    private Date publicDate;

    /**
     * 实施日期
     */
    @Field(type = FieldType.Auto)
    private Date implementDate;

    /**
     * 废止时间
     */
    @Field(type = FieldType.Auto)
    private Date revocateDate;

    /**
     * 题注
     */
    @Field(type = FieldType.Auto)
    private String caption;

    /**
     * 主题词
     */
    @Field(type = FieldType.Keyword)
    private String keyword;

    /**
     * 主题分类(0:国家科技创新领导体制,1:科技成果转化,2:科技人才发展,3:产学研协同创新,4:中央财政科技计划和经费管理改革,5:科技治理制度,6:区域创新发展,7:科技开放合作,8:科技创新立法)
     */
    @Field(type = FieldType.Auto)
    private String titleClass;

    @Field(type = FieldType.Auto)
    private Integer titleClassId;

    /**
     * 公文类型(0:决定,1:通知,2:通报,3:报告,4:请示,5:批复,6:意见,7:函,8:会议纪要,9:命令(令),10:通告,11:议案,12:其他)
     */
    @Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
    private String policyClass;

    @Field(type = FieldType.Auto)
    private Integer policyClassId;

    /**
     * 特色分类标识
     */
    @Field(type = FieldType.Auto)
    private String featuredClass;

    /**
     * 数据来源
     */
    @Field(type = FieldType.Auto)
    private String dataSource;

    /**
     * 正文
     */
    @Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
    private String text;

    /**
     * 父级政策id
     */
    @Field(type = FieldType.Auto)
    private String parentPolicyid;

    /**
     * 专题id
     */
    @Field(type = FieldType.Auto)
    private String topicId;

    /**
     * 附件id
     */
    @Field(type = FieldType.Auto)
    private String attachId;

    /**
     * 审核状态(0:待审核,1:审核未通过,2:审核通过)
     */
    @Field(type = FieldType.Auto)
    private String status;

    /**
     * 是否删除(0:未删除,1:已删除)
     */
    @Field(type = FieldType.Auto)
    private String isDelete;

    /**
     * 点击量
     */
    @Field(type = FieldType.Auto)
    private Integer extend;
    @Field(type = FieldType.Auto)
    private Date createTime;
    @Field(type = FieldType.Auto)
    private String createId;
    @Field(type = FieldType.Auto)
    private String createName;

    /**
     * 是否废止旧政(0:是,1:否)
     */
    @Field(type = FieldType.Auto)
    private Integer isReplaceOld;

    /**
     * 同时废止旧政id
     */
    @Field(type = FieldType.Auto)
    private String oldpolicyId;

    /**
     * 旧政名称
     */
    @Field(type = FieldType.Auto)
    private String oldpolicyName;

    /**
     * 是否被新政替代(0:是,1:否)
     */
    @Field(type = FieldType.Auto)
    private Integer isReplaced;

    /**
     * 新政id
     */
    @Field(type = FieldType.Auto)
    private String newpolicyId;

    /**
     * 新政名称
     */
    @Field(type = FieldType.Auto)
    private String newpolicyName;
    @Field(type = FieldType.Auto)
    private String pdfId;
    @Field(type = FieldType.Auto)
    private String textNonformat;
    
}

创建dao使用springboot-data-jpa ,String是实体的主键。这样简单的CRUD都有了

@Component
public interface RmPolicyPublicationDao extends ElasticsearchRepository<RmPolicyPublication,String> {

}

 直接注入dao和template可以直接用,简直太方便了

    @Resource
    private RmPolicyPublicationDao rmPolicyPublicationDao;

    @Resource
    private ElasticsearchRestTemplate elasticsearchTemplate;

 随便写一个查询

 @Override
    public List<RmPolicyPublication> highQuery() {
        MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("text", "化部办");


        logger.info("DSL:{}",matchQueryBuilder.toString());
        NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
        nativeSearchQueryBuilder.withQuery(matchQueryBuilder)
                .withFields("text")
                .withHighlightFields(new HighlightBuilder.Field("text"))
                .withHighlightBuilder(new HighlightBuilder().preTags("<span style='color:red'>").postTags("</span>"));
        NativeSearchQuery nativeSearchQuery = nativeSearchQueryBuilder.build();

        SearchHits<RmPolicyPublication> search = elasticsearchTemplate.search(nativeSearchQuery, RmPolicyPublication.class);

        List<RmPolicyPublication> list = new ArrayList<>();
        List<SearchHit<RmPolicyPublication>> searchHits = search.getSearchHits();
        for (SearchHit<RmPolicyPublication> searchHit : searchHits) {
            Map<String, List<String>> highlightFields = searchHit.getHighlightFields();
            //将高亮的内容填充到content中
            searchHit.getContent().setIssuer(highlightFields.get("text")==null ? searchHit.getContent().getIssuer():highlightFields.get("text").get(0));
            list.add(searchHit.getContent());
        }
        return list;
    }

完成了,剩下也没啥了  demo我直接扔 码云上了 自己看吧。

springboot-es-demo: springboot集成es7

有关Springboot集成elasticsearch7的更多相关文章

  1. ruby-on-rails - 如何使辅助方法在 Rails 集成测试中可用? - 2

    我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel

  2. ruby-on-rails - 我如何将 Hoptoad 与 DelayedJob 和 DaemonSpawn 集成? - 2

    我一直很高兴地使用DelayedJob习惯用法:foo.send_later(:bar)这会调用DelayedJob进程中对象foo的方法bar。我一直在使用DaemonSpawn在我的服务器上启动DelayedJob进程。但是...如果foo抛出异常,Hoptoad不会捕获它。这是任何这些包中的错误...还是我需要更改某些配置...或者我是否需要在DS或DJ中插入一些异常处理来调用Hoptoad通知程序?回应下面的第一条评论。classDelayedJobWorker 最佳答案 尝试monkeypatchingDelayed::W

  3. jenkins部署1--jenkins+gitee持续集成 - 2

    前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon

  4. ruby - Rails Elasticsearch 聚合 - 2

    不知何故,我似乎无法获得包含我的聚合的响应...使用curl它按预期工作:HBZUMB01$curl-XPOST"http://localhost:9200/contents/_search"-d'{"size":0,"aggs":{"sport_count":{"value_count":{"field":"dwid"}}}}'我收到回复:{"took":4,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":90,"max_score":0.0,"hits":[]},"a

  5. 三分钟集成 TapTap 防沉迷 SDK(Unity 版) - 2

    三分钟集成Tap防沉迷SDK(Unity版)一、SDK介绍基于国家对上线所有游戏必须增加防沉迷功能的政策下,TapTap推出防沉迷SDK,供游戏开发者进行接入;允许未成年用户在周五、六、日以及法定节假日晚上8:00-9:00进行游戏,防沉谜时间段进入游戏会弹窗进行提示!开发环境要求:Unity2019.4或更高版本iOS10或更高版本Android5.0(APIlevel21)或更高版本🔗Unity集成Demo参考链接🔗UnityTapSDK功能体验APK下载链接二、集成前准备1.创建应用进入开发者后台,按照提示开始创建应用;2.开通服务在使用TDS实名认证和防沉迷服务之前,需要在上面创建的应

  6. elasticsearch源码关于TransportSearchAction【阶段三】 - 2

    1.回顾.TransportServicepublicclassTransportServiceextendsAbstractLifecycleComponentTransportService:方法:1publicfinalTextendsTransportResponse>voidsendRequest(finalTransport.Connectionconnection,finalStringaction,finalTransportRequestrequest,finalTransportRequestOptionsoptions,TransportResponseHandlerT>

  7. ruby-on-rails - RailsTutorial - 第 8.4.3 章 - 在集成测试中添加用户后未清除测试数据库 - 2

    我被这个难住了。到目前为止教程中的一切都进行得很顺利,但是当我将这段代码添加到我的/spec/requests/users_spec.rb文件中时,事情开始变得糟糕:describe"success"doit"shouldmakeanewuser"dolambdadovisitsignup_pathfill_in"Name",:with=>"ExampleUser"fill_in"Email",:with=>"ryan@example.com"fill_in"Password",:with=>"foobar"fill_in"Confirmation",:with=>"foobar"cl

  8. ruby-on-rails - 使用 Rails (Tire) 和 ElasticSearch 进行模糊字符串匹配 - 2

    我有一个Rails应用程序,现在设置了ElasticSearch和Tiregem以在模型上进行搜索,我想知道我应该如何设置我的应用程序以对模型中的某些索引进行模糊字符串匹配。我将我的模型设置为索引标题、描述等内容,但我想对其中一些进行模糊字符串匹配,但我不确定在何处进行此操作。如果您想发表评论,我将在下面包含我的代码!谢谢!在Controller中:defsearch@resource=Resource.search(params[:q],:page=>(params[:page]||1),:per_page=>15,load:true)end在模型中:classResource'Us

  9. ruby-on-rails - 将 Angular JS 与 Rails 集成 - 2

    我需要一些指导来了解如何将Angular整合到rails中。选择Rails的原因:我喜欢他们偏执的做事方式。还有迁移,gem真的很酷。使用angular的原因:我正在研究和寻找最适合SPA的框架。Backbone似乎太抽象了。我不得不在Angular和Ember之间做出选择。我首先开始阅读Angular,它对我来说很有意义。所以我从来没有去读过关于ember的文章。使用Angular和Rails的原因:我研究并尝试使用小型框架,例如grape、slim(是的,我也使用php)。但我觉得需要坚持项目的长期范围。我个人喜欢用Rails的方式做事。这就是我需要帮助的地方,我在Rails4中有

  10. ruby - 在 Maven 集成中运行 Ruby 单元测试 - 2

    有没有人有在Maven中运行用Ruby编写的单元测试的经验。任何输入,如要使用的库/maven插件,将不胜感激!我们已经在使用Maven+hudson+Junit。但是我们正在引入Ruby单元测试,找不到任何同样好的组合。 最佳答案 我建议让Maven使用ExecMavenPlugin启动rake测试(exec:exec目标)并使用ci_reportergem生成单元测试结果的XML文件,Hudson、Bamboo等可以读取该文件,以与JUnit测试相同的格式显示测试结果。如果您不需要使用mvntest运行Ruby测试,您也可以只使

随机推荐