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

阅读更多

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

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

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

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

首先我们看看web界面

首页:

elasticsearch结合spring springmvc jest 使用做成WEB架构_第1张图片

点击:创建索引

elasticsearch结合spring springmvc jest 使用做成WEB架构_第2张图片

创建索引成功..

elasticsearch结合spring springmvc jest 使用做成WEB架构_第3张图片

搜索:

elasticsearch结合spring springmvc jest 使用做成WEB架构_第4张图片

搜索结果:

elasticsearch结合spring springmvc jest 使用做成WEB架构_第5张图片

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

 

 


 

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

elasticsearch结合spring springmvc jest 使用做成WEB架构_第6张图片

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

下面pom.xml代码

 

xml version="1.0" encoding="UTF-8"?>xmlns="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">4.0.0com.mkfreesosowar1.0-SNAPSHOTjava-jest-sampleUTF-83.1.2.RELEASE1.5.101.6.11.64.8.21.6.9sonatypeSonatype Groupshttps://oss.sonatype.org/content/groups/public/io.searchboxjest0.0.2org.elasticsearchelasticsearch0.19.11org.springframeworkspring-context${spring.version}commons-loggingcommons-loggingorg.springframeworkspring-webmvc${spring.version}org.springframeworkspring-orm${spring.version}jarcompileorg.springframeworkspring-test${spring.version}jartestorg.aspectjaspectjrt${org.aspectj-version}javax.injectjavax.inject1taglibsstandard1.1.2jarcompilejunitjunit${junit.version}testjstljstl1.1.2jarcompileorg.springframeworkspring-beans${spring.version}org.slf4jslf4j-log4j12${slf4j-log4j12.version}cglibcglib2.2cloudbees-public-releasehttp://repository-cloudbees.forge.cloudbees.com/public-releasetruefalsejava-jest-sampleorg.mortbay.jettymaven-jetty-plugin6.1.109966fooorg.apache.maven.pluginsmaven-dependency-plugin2.3packagecopyorg.mortbay.jettyjetty-runner7.5.4.v20111024jetty-runner.jarorg.apache.maven.pluginsmaven-compiler-plugin2.3.2${java.version}${java.version}com.cloudbeesbees-maven-plugin1.3.2${basedir}/src/main/webapp/WEB-INF/classes/

 

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

源碼下載:見附件

  • java-jest.rar (77 KB)
  • 下载次数: 33

你可能感兴趣的:(elasticsearch,spring,springmvc,jest,WEB,架构)