`

ES部署以及程序开发

阅读更多

背景描述:

       系统搜索推广活动,由以前的数据库模糊匹配的方式切换为搜索引擎的方式,选用的内容以ElasticSearch为主,本篇文档主要记录了使用ES进行单节点部署以及开发ES搜索的代码讲解,最后会上传部分代码供大家参考。

 

系统环境:

        部署环境:CentOS 6.7 + JDK 1.7 + ElasticSearch 2.3.5

        开发环境:Window 10 + JDK 1.7 + IDEA 2017

 

环境准备:

        集成POM依赖:

      
<dependency> 
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.4</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-elasticsearch</artifactId>
    <version>2.0.4.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>2.3.5</version>
</dependency>
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjrt</artifactId>
    <version>1.7.1</version>
</dependency>
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.7.1</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.17</version>
</dependency>

 

 

      添加Spring配置:

 

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop" 
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"
       xsi:schemaLocation="
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-3.0.xsd
      http://www.springframework.org/schema/aop 
      http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
      http://www.springframework.org/schema/tx 
      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
      http://www.springframework.org/schema/data/elasticsearch 
      http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch.xsd
      ">

    <!-- 开启配置扫描 -->
    <context:component-scan base-package="com.jiangzh"></context:component-scan>

    <!-- 随便配置一个ES的节点信息,并且开启嗅探功能,会自动发现集群 -->
    <elasticsearch:transport-client id="client"
                                    cluster-name="my-application" 
                                    client-transport-sniff="true"
                                    cluster-nodes="192.168.4.109:9300" />

    <!-- 配置Spring-data对es提供的template -->
    <bean name="elasticsearchTemplate"
          class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
        <constructor-arg name="client" ref="client" />
    </bean>

</beans>

 

 

     创建数据实体,与数据字段一一对应,用来进行快速查询使用:

  

public class AppPOJO {

    private int res_pk;
    private String res_kaipk;
    private String res_name;
    // 省略getter和setter方法

}

 

    创建VO实体,按实际需要,将数据实体转换为业务实体,并返回:

   

@Document(indexName = "testidex",type = "estype")
public class AppModel {
    @Id
private Integer appId; private String resName; 
    // 省略其他属性以及getter和setter方法
}

 

 

    

 开发搜索功能:

   

       1、数据层:

       提供了基本的数据支撑,包含了基本的CRUD操作:

       新增功能的核心实现:

          

String pid = et.index(new IndexQueryBuilder()
        // 获取数据操作的index
        .withIndexName(ESConst.ESIndexEnum.APPSEARCH.getName())
        // 获取数据操作的Type
        .withType(ESConst.ESTypeEnum.APPSEARCH.getName())
        // 设置数据ID,如果不设置会自动生成
        .withId("" + pojo.getRes_pk())
        // 具体新增的数据
        .withSource(jsonData)
        .build()
);

  

        2、修改功能核心实现

 

IndexRequest indexRequest = new IndexRequest();
indexRequest.source(jsonData);
UpdateQuery updateQuery = new UpdateQueryBuilder()
        .withIndexName(ESConst.ESTypeEnum.APPSEARCH.getName())
        .withType(ESConst.ESTypeEnum.APPSEARCH.getName())
        .withId(""+pojo.getRes_pk())
        .withIndexRequest(indexRequest)
        .withClass(AppPOJO.class)
        .build();
et.update(updateQuery);

 

    3、删除功能核心实现

   

DeleteQuery deleteQuery = new DeleteQuery();
deleteQuery.setQuery(QueryBuilders.termQuery("appId", ""+appUid));
deleteQuery.setIndex(ESConst.ESIndexEnum.APPSEARCH.getName());
deleteQuery.setType(ESConst.ESTypeEnum.APPSEARCH.getName());
et.delete(deleteQuery);

 

 

  4、根据主键进行查询

StringQuery query = new StringQuery(
        QueryBuilders.termQuery("appId",appUid).toString()
);
AppPOJO appPOJO = et.queryForObject(query,AppPOJO.class);

  这里一定要注意,使用这个API的时候,要对实体Model进行注解标记,详见代码

 

 

5、查询所有数据,用于首页展示,核心代码如下:

// 使用Scan方式进行扫描,可以提高查询速度
// 设置查询条件
SearchQuery searchQuery = new NativeSearchQueryBuilder()
        .withIndices(ESConst.ESIndexEnum.APPSEARCH.getName())
        .withTypes(ESConst.ESTypeEnum.APPSEARCH.getName())
        .withQuery(QueryBuilders.matchAllQuery())
        .withFilter(QueryBuilders.termQuery("res_online","y"))
        .withPageable(new PageRequest(0,1)).build();

// 通过查询条件,生成扫描编号
String scrollId = et.scan(searchQuery, 1000, false);

// 通过扫描编号进行数据匹配
Page page = et.scroll(scrollId, 5000L,AppPOJO.class);
List<AppPOJO> content = null;
if(page.hasContent()){
    content = page.getContent();
}else{
    break;
}

 

 

6、获取查询的总数据,主要用于前台页面分页使用

SearchQuery searchQuery = new NativeSearchQueryBuilder()
        .withIndices(ESConst.ESIndexEnum.APPSEARCH.getName())
        .withTypes(ESConst.ESTypeEnum.APPSEARCH.getName())
        .withQuery(QueryBuilders.multiMatchQuery(condition
                ,"column1","column2"))
        .build();
long count = et.count(searchQuery);

 

以上,所有数据层的基础API已经完成,其余业务代码由于每个人的业务都不相同,我就不一一分享了,大家可以自行脑补。

 

最后,上述都是核心代码,我会把工程测试代码发到附件中给大家分享

 

分享到:
评论

相关推荐

    微信小程序开发空白模板

    "微信小程序开发空白模板"是开发者开始创建新小程序时的基础框架,它包含了小程序的基本结构和配置文件,使得开发者能够快速搭建起一个可以运行的最小化项目。 一、项目配置文件project.config.json `project....

    基于JAVA语言,SpringBoot+微信小程序+Mysql开发的健身房预约管理系统(含:源码+设计文档+部署说明+视频演示)

    资源内容:源码+部署说明+视频演示+数据库脚本文件 开发语言:JAVA 框架:SpringBoot2.X+微信小程序+MySQL 源码说明: 全部项目源码都是经过测试校正后成功运行。 该项目可以直接作为毕设使用。 项目技术栈: 该...

    elasticsearch-1.7.1源程序包

    安装 Elasticsearch 1.7.1 首先需要解压源码包,然后根据操作系统进行相应的编译和部署。在 Linux 上,通常会涉及以下步骤: 1. 解压:`tar -zxvf elasticsearch-1.7.1.tar.gz` 2. 移动到目标目录:`mv elastic...

    基于java开发的在线商城小程序

    5. **微信小程序开发**:既然提到是“小程序”,那么还需要掌握微信小程序的开发规范和API,如WXML、WXSS、JS等,将Java后端提供的服务集成到小程序中。 6. **支付接口集成**:在线商城离不开支付功能,开发者需要...

    Play-Framework-ElasticSearch-Module

    将两者结合,即通过Play Framework集成Elasticsearch模块(Play-Framework-ElasticSearch-Module),可以极大提升应用程序的搜索能力和数据处理效率。 #### Elasticsearch:新一代搜索解决方案 Elasticsearch作为...

    elasticsearch-7.17.9-windows-x86-64.zip

    Elasticsearch是一个强大的开源搜索引擎,基于Java开发,其核心特性是全文检索,分布式,实时,容错性好,且设计时考虑了水平扩展性。它能够处理大量的数据,并且提供了丰富的查询、分析以及聚合功能,广泛应用于...

    elasticsearch.zip

    综上所述,"elasticsearch.zip" 文件提供了一个将Elasticsearch集成到ThinkPHP项目中的解决方案,通过学习和实践这些知识点,开发者可以充分利用Elasticsearch的强大力量,提升应用程序的数据处理能力。

    springboot-elasticsearch-master.rar

    本项目"springboot-elasticsearch-master"就是将这两者完美融合,提供了基于SpringBoot的Elasticsearch API实现,旨在简化ES的使用,让开发者能够更便捷地进行数据查询、新增、删除以及批量操作。 首先,我们需要...

    Android 三维程序设计-基于OpenGL ES的图形应用程序设计

    此外,开发OpenGL ES图形应用程序需要使用Android SDK提供的GLSurfaceView和GLSurfaceView.Renderer这两个核心组件。GLSurfaceView是专门为OpenGL ES渲染而设计的视图,GLSurfaceView.Renderer定义了渲染器接口,...

    Elasticsearch.zip 包含 elasticsearch、elasticsearch-analysis-ik、es-head、kibana

    之后,部署es-head,通过浏览器访问来监控Elasticsearch集群的状态。最后,设置和使用Kibana来实现数据的可视化。 在Java环境中,Elasticsearch提供了丰富的Java API,便于Java开发者直接在应用程序中集成和操作。...

    elasticsearch-8.6.2-windows-x86-64.zip

    Elasticsearch是一个强大的开源搜索引擎,基于Java开发,其核心功能是全文检索,但同时也支持结构化数据、非结构化数据以及时间序列数据的检索。它以其高效、灵活、可扩展的特性,在现代大数据和实时分析场景中广泛...

    自动化离线部署linux开发必备环境

    总结来说,离线部署Linux开发环境是一项复杂但重要的任务,需要对各个组件的功能、依赖关系以及安装步骤有深入理解。通过自动化脚本,可以简化这个过程,提高效率,减少人为错误,使开发人员能更快地投入到实际的...

    Ossec IDS with Elasticsearch安装部署手册

    本文将详细介绍如何将OSSEC IDS与Elasticsearch和Kibana整合,实现数据存储和呈现的系统部署。 ### OSSEC IDS简介 OSSEC是一款开源的入侵检测系统,支持Windows、Linux、OpenBSD/FreeBSD以及Mac OS等多种操作系统...

    elasticsearch-所需资料elasticsearch+elasticsearch-head+kibana+IK+jdk.zip

    所需资料elasticsearch+elasticsearch-head+kibana+IK+jdk.zip" 提供的是一套完整的Elasticsearch生态环境,其中包括Elasticsearch自身、用于图形化界面管理的elasticsearch-head、数据可视化工具Kibana以及常用的...

    elasticsearch 2.4.6 版 与Spring boot 打他 完美支持

    总的来说,Elasticsearch 2.4.6与Spring Boot的结合为开发人员提供了一种高效、灵活的解决方案,用于构建具有强大搜索和分析能力的应用程序。通过使用Spring Boot的自动化配置和Elasticsearch的API,开发人员可以...

    elasticsearch_service插件

    在Windows系统中,服务包装器可能包含一个名为"elasticsearch-service.bat"的批处理文件,以及一个"msi"安装程序,用于将Elasticsearch注册为Windows服务。通过执行批处理文件,可以实现类似的功能: ```cmd bin\...

    Go-Golang程序从一组kafka主题中读取记录并将它们写入elasticsearch集群

    Go程序将Kafka中的数据写入Elasticsearch,这需要对Elasticsearch的API有深入理解,包括索引管理、文档操作(如索引、更新和删除)以及批量操作。 5. **数据序列化与反序列化**:在从Kafka消费消息并将其写入...

    Springboot开发-将springboot与elasticsearch进行整合开发.zip

    在现代的Web应用程序开发中,Spring Boot和Elasticsearch已经成为两个非常重要的技术组件。Spring Boot以其简化Spring应用的初始化和配置而闻名,而Elasticsearch则是一个强大的分布式搜索引擎,广泛用于大数据分析...

    方正飞鸿快速开发平台ES2007V3.5版本功能介绍

    SOA架构允许ES2007平台开发的应用程序在不同的技术环境中无缝切换,支持.NET平台和J2EE平台。这种跨平台的兼容性为企业提供了更大的选择空间,可以根据实际需求和技术环境灵活调整。此外,平台支持多种关系型数据库...

Global site tag (gtag.js) - Google Analytics