背景描述:
系统搜索推广活动,由以前的数据库模糊匹配的方式切换为搜索引擎的方式,选用的内容以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已经完成,其余业务代码由于每个人的业务都不相同,我就不一一分享了,大家可以自行脑补。
最后,上述都是核心代码,我会把工程测试代码发到附件中给大家分享
相关推荐
Elasticsearch 6.6.0 AArch64 ARM 是专为华为ARM架构服务器优化的搜索引擎和数据...对于开发人员,了解如何利用Elasticsearch的API进行数据操作和查询优化,以及如何与其他工具集成,将有助于提升整体解决方案的价值。
"微信小程序开发空白模板"是开发者开始创建新小程序时的基础框架,它包含了小程序的基本结构和配置文件,使得开发者能够快速搭建起一个可以运行的最小化项目。 一、项目配置文件project.config.json `project....
资源内容:源码+部署说明+视频演示+数据库脚本文件 开发语言:JAVA 框架:SpringBoot2.X+微信小程序+MySQL 源码说明: 全部项目源码都是经过测试校正后成功运行。 该项目可以直接作为毕设使用。 项目技术栈: 该...
安装 Elasticsearch 1.7.1 首先需要解压源码包,然后根据操作系统进行相应的编译和部署。在 Linux 上,通常会涉及以下步骤: 1. 解压:`tar -zxvf elasticsearch-1.7.1.tar.gz` 2. 移动到目标目录:`mv elastic...
5. **微信小程序开发**:既然提到是“小程序”,那么还需要掌握微信小程序的开发规范和API,如WXML、WXSS、JS等,将Java后端提供的服务集成到小程序中。 6. **支付接口集成**:在线商城离不开支付功能,开发者需要...
Elasticsearch是一个强大的开源搜索引擎,基于Java开发,其核心特性是全文检索,分布式,实时,容错性好,且设计时考虑了水平扩展性。它能够处理大量的数据,并且提供了丰富的查询、分析以及聚合功能,广泛应用于...
将两者结合,即通过Play Framework集成Elasticsearch模块(Play-Framework-ElasticSearch-Module),可以极大提升应用程序的搜索能力和数据处理效率。 #### Elasticsearch:新一代搜索解决方案 Elasticsearch作为...
综上所述,"elasticsearch.zip" 文件提供了一个将Elasticsearch集成到ThinkPHP项目中的解决方案,通过学习和实践这些知识点,开发者可以充分利用Elasticsearch的强大力量,提升应用程序的数据处理能力。
本项目"springboot-elasticsearch-master"就是将这两者完美融合,提供了基于SpringBoot的Elasticsearch API实现,旨在简化ES的使用,让开发者能够更便捷地进行数据查询、新增、删除以及批量操作。 首先,我们需要...
此外,开发OpenGL ES图形应用程序需要使用Android SDK提供的GLSurfaceView和GLSurfaceView.Renderer这两个核心组件。GLSurfaceView是专门为OpenGL ES渲染而设计的视图,GLSurfaceView.Renderer定义了渲染器接口,...
之后,部署es-head,通过浏览器访问来监控Elasticsearch集群的状态。最后,设置和使用Kibana来实现数据的可视化。 在Java环境中,Elasticsearch提供了丰富的Java API,便于Java开发者直接在应用程序中集成和操作。...
Elasticsearch是一个强大的开源搜索引擎,基于Java开发,其核心功能是全文检索,但同时也支持结构化数据、非结构化数据以及时间序列数据的检索。它以其高效、灵活、可扩展的特性,在现代大数据和实时分析场景中广泛...
本文将详细介绍如何将OSSEC IDS与Elasticsearch和Kibana整合,实现数据存储和呈现的系统部署。 ### OSSEC IDS简介 OSSEC是一款开源的入侵检测系统,支持Windows、Linux、OpenBSD/FreeBSD以及Mac OS等多种操作系统...
所需资料elasticsearch+elasticsearch-head+kibana+IK+jdk.zip" 提供的是一套完整的Elasticsearch生态环境,其中包括Elasticsearch自身、用于图形化界面管理的elasticsearch-head、数据可视化工具Kibana以及常用的...
总的来说,Elasticsearch 2.4.6与Spring Boot的结合为开发人员提供了一种高效、灵活的解决方案,用于构建具有强大搜索和分析能力的应用程序。通过使用Spring Boot的自动化配置和Elasticsearch的API,开发人员可以...
在Windows系统中,服务包装器可能包含一个名为"elasticsearch-service.bat"的批处理文件,以及一个"msi"安装程序,用于将Elasticsearch注册为Windows服务。通过执行批处理文件,可以实现类似的功能: ```cmd bin\...
Go程序将Kafka中的数据写入Elasticsearch,这需要对Elasticsearch的API有深入理解,包括索引管理、文档操作(如索引、更新和删除)以及批量操作。 5. **数据序列化与反序列化**:在从Kafka消费消息并将其写入...
在现代的Web应用程序开发中,Spring Boot和Elasticsearch已经成为两个非常重要的技术组件。Spring Boot以其简化Spring应用的初始化和配置而闻名,而Elasticsearch则是一个强大的分布式搜索引擎,广泛用于大数据分析...
SOA架构允许ES2007平台开发的应用程序在不同的技术环境中无缝切换,支持.NET平台和J2EE平台。这种跨平台的兼容性为企业提供了更大的选择空间,可以根据实际需求和技术环境灵活调整。此外,平台支持多种关系型数据库...