`
wbj0110
  • 浏览: 1612992 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

elasticsearch结合spring springmvc jest 使用做成WEB架构

阅读更多

做成WEB的架构,当然我不用servlet了...直接使用spring springmvc去做吧...也当是一个ES跟spring springmvc 集成的例子,为了简单起见,我这里不用freemarker了..我直接使用jsp做视图...我也用了bootstrap去管理一个web页面,这样可以省很多时间...

当然我也是用maven了...如果不有熟悉maven的朋友们,可以跟我交流下,大家学习学习...

提示:项目可以用mvn jetty:run 就可以跑起来了...

代码可能有点长,想学习的童鞋们认真些了...

首先我们看看web界面

首页:

点击:创建索引

创建索引成功..

搜索:

搜索结果:

好了,下面开始真正的代码....

 

 


 

1.看看项目的目录结构:

我就贴重要的几个文件代码出来,源代码已经有了,大家可以下载

下面pom.xml代码

 

<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.mkfree</groupId><artifactId>soso</artifactId><packaging>war</packaging><version>1.0-SNAPSHOT</version><name>java-jest-sample</name><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring.version>3.1.2.RELEASE</spring.version><slf4j.version>1.5.10</slf4j.version><slf4j-log4j12.version>1.6.1</slf4j-log4j12.version><java.version>1.6</java.version><junit.version>4.8.2</junit.version><org.aspectj-version>1.6.9</org.aspectj-version></properties><repositories><repository><id>sonatype</id><name>Sonatype Groups</name><url>https://oss.sonatype.org/content/groups/public/</url></repository></repositories><dependencies><dependency><groupId>io.searchbox</groupId><artifactId>jest</artifactId><version>0.0.2</version></dependency><!-- ES dependency for query builder --><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>0.19.11</version></dependency><!-- Spring Dependencies --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version><exclusions><!-- Exclude Commons Logging in favor of SLF4j --><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>${spring.version}</version><type>jar</type><scope>compile</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version><type>jar</type><scope>test</scope></dependency><!-- AspectJ --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>${org.aspectj-version}</version></dependency><dependency><groupId>javax.inject</groupId><artifactId>javax.inject</artifactId><version>1</version></dependency><!-- View Dependencies --><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.2</version><type>jar</type><scope>compile</scope></dependency><!-- Test Dependencies --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.1.2</version><type>jar</type><scope>compile</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j-log4j12.version}</version></dependency><dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>2.2</version></dependency></dependencies><pluginRepositories><pluginRepository><id>cloudbees-public-release</id><url>http://repository-cloudbees.forge.cloudbees.com/public-release</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></pluginRepository></pluginRepositories><build><finalName>java-jest-sample</finalName><plugins><!-- Plugin to run and test through maven --><plugin><groupId>org.mortbay.jetty</groupId><artifactId>maven-jetty-plugin</artifactId><version>6.1.10</version><configuration><stopPort>9966</stopPort><stopKey>foo</stopKey></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>2.3</version><executions><execution><phase>package</phase><goals><goal>copy</goal></goals><configuration><artifactItems><artifactItem><groupId>org.mortbay.jetty</groupId><artifactId>jetty-runner</artifactId><version>7.5.4.v20111024</version><destFileName>jetty-runner.jar</destFileName></artifactItem></artifactItems></configuration></execution></executions></plugin><!-- Ensures we are compiling at 1.6 level --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>${java.version}</source><target>${java.version}</target></configuration></plugin><plugin><groupId>com.cloudbees</groupId><artifactId>bees-maven-plugin</artifactId><version>1.3.2</version></plugin></plugins><outputDirectory>${basedir}/src/main/webapp/WEB-INF/classes/</outputDirectory></build></project>

 

SearchController 类

 

 

package com.mkfree.soso.action;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.servlet.ModelAndView;import com.mkfree.soso.model.News;import com.mkfree.soso.service.SearchService;/**
 * 搜索控制
 * 
 * @author hk
 * 
 *         2013-1-16 下午8:26:09
 */@Controller@RequestMapping("/")publicclassSearchController{@AutowiredSearchService searchService;@RequestMapping(method =RequestMethod.GET)publicModelAndView home(){ModelAndView mv =newModelAndView();
		mv.setViewName("home");return mv;}@RequestMapping(method =RequestMethod.GET, value ="/search")publicModelAndView search(@RequestParam("q")String query){Listarticles= searchService.searchsNews(query);ModelAndView mv =newModelAndView();
		mv.setViewName("search");
		mv.addObject("articles", articles);return mv;}@RequestMapping(method =RequestMethod.GET, value ="/search/create")publicModelAndView createInitialData(){
		searchService.builderSearchIndex();ModelAndView mv =newModelAndView("forward:/");
		mv.addObject("message","文章索引已创建成功!");return mv;}@RequestMapping(method =RequestMethod.GET, value ="/about")publicModelAndView about(){ModelAndView mv =newModelAndView();
		mv.setViewName("about");return mv;}}

配置客户端 SpringConfiguration 类 

 

 

package com.mkfree.soso.configur;import io.searchbox.client.JestClient;import io.searchbox.client.JestClientFactory;import io.searchbox.client.config.ClientConfig;import io.searchbox.client.config.ClientConstants;import java.util.LinkedHashSet;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/**
 * @author hk
 * 
 *         2013-1-16 下午8:49:51
 */@ConfigurationpublicclassSpringConfiguration{public@BeanClientConfig clientConfig(){String connectionUrl ="http://192.168.56.101:9200";ClientConfig clientConfig =newClientConfig();LinkedHashSetservers=newLinkedHashSet();
		servers.add(connectionUrl);
		clientConfig.getServerProperties().put(ClientConstants.SERVER_LIST, servers);
		clientConfig.getClientFeatures().put(ClientConstants.IS_MULTI_THREADED,false);return clientConfig;}public@BeanJestClient jestClient(){JestClientFactory factory =newJestClientFactory();
		factory.setClientConfig(clientConfig());return factory.getObject();}}

实体类

 

package com.mkfree.soso.model;import io.searchbox.annotations.JestId;/**
 * 虚拟news 搜索文章
 * 
 * @author hk
 * 
 *         2013-1-12 下午11:38:29
 */publicclassNews{@JestIdprivateint id;privateString title;privateString content;publicint getId(){return id;}publicvoid setId(int id){this.id = id;}publicString getTitle(){return title;}publicvoid setTitle(String title){this.title = title;}publicString getContent(){return content;}publicvoid setContent(String content){this.content = content;}}

搜索服务类

 

 

package com.mkfree.soso.service;import io.searchbox.client.JestClient;import io.searchbox.client.JestResult;import io.searchbox.core.Bulk;import io.searchbox.core.Index;import io.searchbox.core.Search;import io.searchbox.indices.CreateIndex;import io.searchbox.indices.DeleteIndex;import java.io.IOException;import java.util.List;import org.elasticsearch.index.query.QueryBuilder;import org.elasticsearch.index.query.QueryBuilders;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.mkfree.soso.model.News;/**
 * es简单服务接口
 * 
 * @author hk
 * 
 *         2013-1-12 下午11:47:16
 */@ServicepublicclassSearchService{@AutowiredprivateJestClient jestClient;int num =100000;/**
	 * 创建es news索引
	 */publicvoid builderSearchIndex(){long start =System.currentTimeMillis();try{// 如果索引存在,删除索引DeleteIndex deleteIndex =newDeleteIndex("news");
			jestClient.execute(deleteIndex);// 创建索引CreateIndex createIndex =newCreateIndex("news");
			jestClient.execute(createIndex);// Bulk 两个参数1:索引名称2:类型名称(用文章(article)做类型名称)Bulk bulk =newBulk("news","article");// 添加添加100万条假数据去服务端(ES)for(int i =0; i < num; i++){News news =newNews();
				news.setId(i +1);
				news.setTitle("elasticsearch结合spring springmvc jest 使用做成WEB架构"+(i +1));
				news.setContent("oyhk 学习笔记 上一篇文章,说到了先利用jest junit构架一个ES的搜索入门例子...现在准备要做一个ES的WEB架构例子,希望大家都学习学习ES分布式搜索引擎,真的非常不错的...欢迎大家一起讨论讨论... 做成WEB的架构,当然我不用servlet了...直接使用spring springmvc去做吧...也当是一个ES跟spring springmvc 集成的例子,为了简单起见,我这里不用freemarker了..我直接使用jsp做视图... 当然我也是用maven了...如果不有熟悉maven的朋友们,可以跟我交流下,大家学习学习..."+(i +1));
				bulk.addIndex(newIndex.Builder(news).build());}
			jestClient.execute(bulk);}catch(Exception e){
			e.printStackTrace();}long end =System.currentTimeMillis();System.out.println("创建索引时间:数据量是  "+ num +"记录,共用时间 -->> "+(end - start)+" 毫秒");}/**
	 * 搜索新闻
	 * 
	 * @param param
	 * @return
	 */publicListsearchsNews(String param){try{long start =System.currentTimeMillis();QueryBuilder queryBuilder =QueryBuilders.queryString(param);Search search =newSearch(Search.createQueryWithBuilder(queryBuilder.toString()));
			search.addIndex("news");
			search.addType("article");JestResult result = jestClient.execute(search);long end =System.currentTimeMillis();System.out.println("在"+ num +"条记录中,搜索新闻,共用时间 -->> "+(end - start)+" 毫秒");return result.getSourceAsObjectList(News.class);}catch(IOException e){
			e.printStackTrace();}catch(Exception e){
			e.printStackTrace();}returnnull;}}

come from internet

源碼下載:見附件

分享到:
评论

相关推荐

    elasticsearch结合spring springmvc jest 使用做成WEB架构

    本教程将详细讲解如何将Elasticsearch与Spring框架(包括Spring和Spring MVC)以及Jest客户端集成,以创建一个功能完备的Web架构。 1. **Elasticsearch简介** Elasticsearch是一个基于Lucene的分布式、实时的搜索...

    springMVC整合elasticsearch,基于maven

    SpringMVC作为Spring框架的一部分,主要用于构建Web应用程序的模型-视图-控制器(MVC)架构,而Elasticsearch则是一种分布式、RESTful风格的搜索和分析引擎,广泛应用于日志分析、实时监控、数据检索等领域。...

    maven springmvc集成elasticsearch客户端项目

    在Elasticsearch中,这通常通过RESTful API来实现,这些API可以使用Spring MVC框架轻松地集成到Web应用程序中。 **标签:“es搜索引擎”** "es搜索引擎"标签进一步确认了我们正在处理一个与Elasticsearch相关的...

    Spring+springMvc+redis+elasticsearch之附件

    总结来说,本项目展示了如何利用Spring和SpringMVC构建一个后端系统,同时结合Redis作为缓存和消息中间件,以及Elasticsearch作为搜索引擎,形成一个高效的数据处理和检索平台。通过合理的整合和配置,这些技术可以...

    spring mvc 集成elasticSearch 5.5.0版本

    总的来说,通过Spring MVC与Elasticsearch的集成,我们可以轻松地在Web应用中利用Elasticsearch的强大搜索功能,实现高效的数据库操作。确保正确配置和理解Elasticsearch的基本概念,如索引、类型、映射等,是成功...

    spring-data-jest, Jest的Spring Data 实现.zip

    spring-data-jest, Jest的Spring Data 实现 Spring Data Jest 基于on客户端的ElasticSearch的Spring Data 实现仅在 HTTP ( 例如AWS上) 可以访问的情况下使用 Spring Data 和ElasticSearch群集。

    Elasticsearch之Java客户端Jest的全部依赖jar包

    本资源包含的是Jest客户端的全部依赖jar包,确保了在Java项目中使用Jest进行Elasticsearch操作时的完整性和稳定性。 首先,Jest客户端的核心功能在于其RESTful API的实现。REST(Representational State Transfer)...

    elasticsearch集成spring开发实例

    在现代大数据分析和实时搜索领域,Elasticsearch(简称 ES)已经成为了广泛使用的工具。它是一个分布式、RESTful 风格的搜索和数据分析引擎,能够处理大量数据并提供快速响应。而Spring框架作为Java企业级应用的事实...

    解决spring-data-elasticsearch 5.4.0 不支持 5.4.1的elasticsearch问题

    在使用Spring Data Elasticsearch框架时,可能会遇到一个常见的问题,即版本兼容性问题。Spring Data Elasticsearch 5.4.0设计时可能并未考虑到与Elasticsearch 5.4.1的完全兼容,导致在升级Elasticsearch到5.4.1后...

    elasticsearch spring 集成

    **Elasticsearch与Spring的集成详解** 在现代的Java Web应用中,Elasticsearch作为一个强大的分布式搜索引擎,常常被用于处理大量的数据检索需求。而Spring框架则以其灵活性和全面性成为企业级开发的首选。将...

    spring+springMVC全量jar包

    Spring 是一个全面的后端开发框架,提供了一整套服务管理、依赖注入、AOP(面向切面编程)等功能,而 SpringMVC 是 Spring 框架的一部分,专门用于构建 Web 应用的 MVC(模型-视图-控制器)架构。 **Spring 框架** ...

    Elasticsearch+spring

    Elasticsearch 是一个分布式、RESTful 风格的搜索和分析引擎,而 Spring 框架是 Java 开发中最常用的应用框架之一,两者结合可以为开发者提供强大的数据检索和分析能力。 ### Elasticsearch 简介 Elasticsearch 是...

    elasticsearch整合Spring用例

    本文将详细讲解如何将Elasticsearch与Spring Data结合使用,包括所需的坐标(依赖)、示例代码以及实体类的设计。 首先,集成Elasticsearch与Spring Data的关键在于正确配置项目的依赖。在Maven项目中,你需要在pom...

    基于Spring Data Jest的Elasticsearch数据统计示例

    本文主要介绍了基于Spring Data Jest的Elasticsearch数据统计示例,通过使用Spring Data Jest链接Elasticsearch,实现数据统计示例。同时,本文也介绍了命令查询职责分离模式(CQRS)和事件驱动(Event-Driven)等...

    spring boot + es结合Jest实现全站搜索,分页,分词搜索,搜索结果高亮,功能很全,博文里面有详细的介绍.zip

    Spring Boot结合Jest实现对ElasticSearch的全文检索,分词检索,分页,搜索结果高亮关键词,多字段检索 PageController中的搜索方法里面是全套的,分词,分页,高亮等都包含,数据格式个es-head中创建索引的索引在...

    spring mvc + es

    Spring MVC 和 Elasticsearch(ES)是两个在Java开发中非常重要的技术。Spring MVC 是Spring框架的一部分,主要用于构建Web应用程序,提供模型-视图-控制器(MVC)架构模式。Elasticsearch则是一个分布式、RESTful...

    spring-data-elasticsearch

    12. 异常翻译:Spring Data Elasticsearch可以将Elasticsearch的原生异常翻译成Spring Data的异常体系,便于在Spring框架内进行错误处理和异常管理。 Spring Data Elasticsearch的目标是为Java开发者提供一个简单、...

    elasticsearch+SpringMVC工具.7z

    本文件包含了es的两个版本2.4.0和6.2.4实例中用的是2版本需要spring4或以上,文件中有SpringMVC+Spring+Hiberante+JPA+ESeacher的所有jar包和xml文件配置,还有业务代码的说明使用(dao\service\),还包含了ik分词...

    spring-data-elasticsearch中文使用文档

    **Spring-Data-Elasticsearch中文使用文档** Spring Data Elasticsearch 是一个强大的Java库,它使得在Elasticsearch数据库中操作数据变得更加简单。这个框架是Spring Data项目的一部分,它为Elasticsearch提供了...

    spring整合elasticsearch-2.3.5

    本示例程序主要是spring 整合elasticsearch-2.3.5的实践,测试时先将配置文件es.properties中ES服务端es.ip,es.port, es.cluster 配置替换成自己的服务器信息

Global site tag (gtag.js) - Google Analytics