elasticsearch结合spring springmvc jest 使用做成WEB架构
来源:互联网 发布:七天网络阅卷查分入口 编辑:程序博客网 时间:2024/06/05 18:41
elasticsearch结合spring springmvc jest 使用做成WEB架构
oyhk 学习笔记
上一篇文章,说到了先利用jest junit构架一个ES的搜索入门例子...现在准备要做一个ES的WEB架构例子,希望大家都学习学习ES分布式搜索引擎,真的非常不错的...欢迎大家一起讨论讨论...
做成WEB的架构,当然我不用servlet了...直接使用spring springmvc去做吧...也当是一个ES跟spring springmvc 集成的例子,为了简单起见,我这里不用freemarker了..我直接使用jsp做视图...我也用了bootstrap去管理一个web页面,这样可以省很多时间...
当然我也是用maven了...如果不有熟悉maven的朋友们,可以跟我交流下,大家学习学习...
提示:项目可以用mvn jetty:run 就可以跑起来了...
代码可能有点长,想学习的童鞋们认真些了...
首先我们看看web界面
首页:
点击:创建索引
创建索引成功..
搜索:
搜索结果:
好了,下面开始真正的代码....
1.看看项目的目录结构:
我就贴重要的几个文件代码出来,源代码已经有了,大家可以下载
下面pom.xml代码
SearchController 类
- <?xml version="1.0" encoding="UTF-8"?>
- <project 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">
- <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>
配置客户端 SpringConfiguration 类
- 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("/")
- public class SearchController {
- @Autowired
- SearchService searchService;
- @RequestMapping(method = RequestMethod.GET)
- public ModelAndView home() {
- ModelAndView mv = new ModelAndView();
- mv.setViewName("home");
- return mv;
- }
- @RequestMapping(method = RequestMethod.GET, value = "/search")
- public ModelAndView search(@RequestParam("q") String query) {
- Listarticles = searchService.searchsNews(query);
- ModelAndView mv = new ModelAndView();
- mv.setViewName("search");
- mv.addObject("articles", articles);
- return mv;
- }
- @RequestMapping(method = RequestMethod.GET, value = "/search/create")
- public ModelAndView createInitialData() {
- searchService.builderSearchIndex();
- ModelAndView mv = new ModelAndView("forward:/");
- mv.addObject("message", "文章索引已创建成功!");
- return mv;
- }
- @RequestMapping(method = RequestMethod.GET, value = "/about")
- public ModelAndView about() {
- ModelAndView mv = new ModelAndView();
- mv.setViewName("about");
- return mv;
- }
- }
- 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
- */
- @Configuration
- public class SpringConfiguration {
- public @Bean
- ClientConfig clientConfig() {
- String connectionUrl = "http://192.168.56.101:9200";
- ClientConfig clientConfig = new ClientConfig();
- LinkedHashSetservers = new LinkedHashSet();
- servers.add(connectionUrl);
- clientConfig.getServerProperties().put(ClientConstants.SERVER_LIST, servers);
- clientConfig.getClientFeatures().put(ClientConstants.IS_MULTI_THREADED, false);
- return clientConfig;
- }
- public @Bean
- JestClient jestClient() {
- JestClientFactory factory = new JestClientFactory();
- 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
- */
- public class News {
- @JestId
- private int id;
- private String title;
- private String content;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getTitle() {
- return title;
- }
- public void setTitle(String title) {
- this.title = title;
- }
- public String getContent() {
- return content;
- }
- public void setContent(String content) {
- this.content = content;
- }
- }
其他的...jsp文件我就不贴出代码了....
- 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
- */
- @Service
- public class SearchService {
- @Autowired
- private JestClient jestClient;
- int num = 100000;
- /**
- * 创建es news索引
- */
- public void builderSearchIndex() {
- long start = System.currentTimeMillis();
- try {
- // 如果索引存在,删除索引
- DeleteIndex deleteIndex = new DeleteIndex("news");
- jestClient.execute(deleteIndex);
- // 创建索引
- CreateIndex createIndex = new CreateIndex("news");
- jestClient.execute(createIndex);
- // Bulk 两个参数1:索引名称2:类型名称(用文章(article)做类型名称)
- Bulk bulk = new Bulk("news", "article");
- // 添加添加100万条假数据去服务端(ES)
- for (int i = 0; i < num; i++) {
- News news = new News();
- 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(new Index.Builder(news).build());
- }
- jestClient.execute(bulk);
- } catch (Exception e) {
- e.printStackTrace();
- }
- long end = System.currentTimeMillis();
- System.out.println("创建索引时间:数据量是 " + num + "记录,共用时间 -->> " + (end - start) + " 毫秒");
- }
- /**
- * 搜索新闻
- *
- * @param param
- * @return
- */
- public ListsearchsNews(String param) {
- try {
- long start = System.currentTimeMillis();
- QueryBuilder queryBuilder = QueryBuilders.queryString(param);
- Search search = new Search(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();
- }
- return null;
- }
- }
这博客希望对大家有用...进一步对ES研究....
阅读全文
0 0
- elasticsearch结合spring springmvc jest 使用做成web架构
- elasticsearch结合spring springmvc jest 使用做成WEB架构
- 使用elasticsearch 2.1 和 java客户端 jest 建立springmvc项目
- elasticsearch RESTful搜索引擎-(java jest 使用[入门])
- elasticsearch RESTful搜索引擎-(java jest 使用[入门])
- elasticsearch jest client 注意事项
- elasticsearch java客户端 - Jest
- ElasticSearch学习13_ElasticSearch RESTful搜索引擎_Java Jest使用入门
- logback与Spring、SpringMVC结合使用教程
- logback与Spring、SpringMVC结合使用教程
- logback与Spring、SpringMVC结合使用教程
- logback与Spring、SpringMVC结合使用教程
- logback与Spring、SpringMVC结合使用教程
- logback与Spring、SpringMVC结合使用教程
- Spring+springMvc+redis+elasticsearch
- Elasticsearch Jest实战深入详解
- Elasticsearch结合Nginx使用
- Spring结合三层架构
- ASP.NET Web Form(八)
- centos7安装maven
- 欢迎使用CSDN-markdown编辑器
- 面向对象23个设计模式(1)——工厂方法模式
- js已知两个数组,这两个数组中有相同项,要把A数组中与B数组相同的项删除
- elasticsearch结合spring springmvc jest 使用做成WEB架构
- androidstudio 上传代码到git
- 常见面试题整理--数据库篇
- Markdown编辑器攻略
- 微信小程序--基础篇(一)弹性布局flex
- (转载)2016 China-Final 解题报告
- JVM内存分配样例
- scala =>符号的使用
- SQL Server 数据库基础编程