`
jkbjxy
  • 浏览: 83965 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Jest初次使用学习记录

阅读更多

Jest是Elasticsearch HTTP Rest接口的java client。

官方地址:https://github.com/searchbox-io/Jest

参考资料:http://blog.mkfree.com/posts/38#

                  http://download.csdn.net/download/foamflower/5272726

                  http://www.ibm.com/developerworks/cn/java/j-javadev2-24/index.html

                 IBM还有一个讲Jest的文章

感觉使用Jest还是挺方便的,官方提供了一个sample,而且源码相对来说比较容易懂。

使用的一些包:

使用Jest建立一个简单的“搜索引擎”,首先建立一个连接Client:

 

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;

public class _JestClient
{
	private static JestClient client ;
	/**
	 * 创建Client
	 * @return
	 */
    public static JestClient initJestClient(){
        // Configuration
        ClientConfig clientConfig = new ClientConfig();
        LinkedHashSet<String> servers = new LinkedHashSet<String>();
        servers.add("http://localhost:9200/");
        clientConfig.getProperties().put(ClientConstants.SERVER_LIST, servers);
        
        //为什么这个会错呀?
        //clientConfig.getClientFeatures().put(ClientConstants.IS_MULTI_THREADED, false);
        clientConfig.getProperties().put(ClientConstants.IS_MULTI_THREADED, false);

        // Construct a new Jest client according to configuration via factory
        JestClientFactory factory = new JestClientFactory();
        factory.setClientConfig(clientConfig);
        if(client == null){
        	client = factory.getObject();
        } else{
        	System.out.println("client null");
        }
        return client;
    }
    
    /**
     * 关闭Client
     */
    public void closeJestClient(){
        if(null != client)
            ((io.searchbox.client.JestClient) client).shutdownClient();
    }
}

 创建索引

import java.io.IOException;

import io.searchbox.client.JestClient;
import io.searchbox.core.Bulk;
import io.searchbox.core.Index;
import io.searchbox.indices.CreateIndex;
import io.searchbox.indices.DeleteIndex;

/**
 * 
 * @author jk
 *
 */
public class NewsIndex {
	
	public void indexNews(JestClient client) throws IOException
	{
		/**
         * if want't use bulk api:
         * Index index = new Index.Builder(new Object()).index("articles").type("article").build();
         * elasticSearchClient.execute(index);
         * 
         */
		Long start = System.currentTimeMillis();
		// Use bulk
        Bulk bulk = new Bulk("news","news");
        
        News news1 = new News();
		news1.setId(1L);
		news1.setTitle("Kimiy Boy Girl");
		news1.setContent("The Lord of the Rings is an epic high fantasy novel written by English philologist and University of Oxford professor J. R. R. Tolkien. " +
                "The story began as a sequel to Tolkien's 1937 children's fantasy novel The Hobbit, but eventually developed into a much larger work. " +
                "It was written in stages between 1937 and 1949, much of it during World War II.[1] It is the third best-selling novel ever written, with over 150 million copies sold.");
		bulk.addIndex(new Index.Builder(news1).build());
        System.out.println("create");
		for(int i=2; i<100000; i++){
			News news = new News();
			news.setId((long)i);
			news.setTitle("Robert Anthony Salvatore");
			news.setContent("Homeland follows the story of Drizzt from around the time and circumstances of his birth and his upbringing amongst the drow (dark elves). " +
	                "The book takes the reader into Menzoberranzan, the drow home city. From here, the reader follows Drizzt on his quest to follow his principles in a land where such " +
	                "feelings are threatened by all his family including his mother Matron Malice. In an essence, the book introduces Drizzt Do'Urden," +
	                " one of Salvatore's more famous characters from the Icewind Dale Trilogy.");
			bulk.addIndex(new Index.Builder(news).build());
		}
		
		try {
			//Delete news index if it is exists
			DeleteIndex deleteIndex = new DeleteIndex("news");
			client.execute(deleteIndex);
			
			// Create articles index
            CreateIndex createIndex = new CreateIndex("news");
            client.execute(createIndex);
            
            client.execute(bulk);
            Long end = System.currentTimeMillis();
            System.out.println("time:"+(end-start)+"mm");
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
}

 搜索

import java.util.List;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import io.searchbox.client.JestClient;
import io.searchbox.client.JestResult;
import io.searchbox.core.Search;

public class NewsSearch {

	//Count
	
	public void search(JestClient client){
		long start = System.currentTimeMillis();
		try {
			String query = "{\"query\":{\"term\":{\"title\":\"Robert\"}}}";
			Search search = new Search(query);
			
			// multiple index or types can be added.
			search.addIndex("news");
			System.out.println("index exist is "+search.isIndexExist("news"));
			
			JestResult result = client.execute(search);
			List<News> list = result.getSourceAsObjectList(News.class);
			System.out.println("list:"+list.size());
	        for (News news : list) {
	            System.out.println("search result is 【Id:" + news.getId()+",Title:"+news.getTitle()+",Content:"+news.getContent()+"】");
	        }
		} catch (Exception e) {
			e.printStackTrace();
		} 
		long end = System.currentTimeMillis();
		System.out.println("times out:"+(end-start)+"mm");
	}
	
	public void search1(JestClient client, 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("news");
	            JestResult result = client.execute(search);
	            List list = result.getSourceAsObjectList(News.class);
	            long end = System.currentTimeMillis();
	            System.out.println("在100万条记录中,搜索新闻,共用时间 -->> " + (end - start) + " 毫秒");
	            for (int i = 0; i < list.size(); i++) {
	                News news = (News) list.get(i);
	                System.out.println(news.getId() + "   " + news.getTitle() + "   " + news.getContent());
	            }

	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	    }
}

 测试

import java.io.IOException;
import io.searchbox.client.JestClient;

/**
 * 测试
 * @author jk
 *
 */
public class Test {

	public static void main(String[] args) throws IOException{
			
		//create client
		JestClient client = _JestClient.initJestClient(); 
	
		//create index
		NewsIndex ni = new NewsIndex();
		ni.indexNews(client);
	
		//search
		NewsSearch ns = new NewsSearch();
		ns.search1(client,"Robert");
	}
}

 建立索引和搜索的效率:不知道DEBUG是什么意思?

建立索引
DEBUG - JestClientFactory.getObject(37) | Creating HTTP client based on configuration
DEBUG - JestClientFactory.getObject(63) | Default http client is created without multi threaded option
INFO - JestClientFactory.getObject(89) | Node Discovery Disabled...
DEBUG - AbstractAction.buildURI(160) | Created uri: news/news
create
DEBUG - AbstractAction.buildURI(160) | Created uri: news
DEBUG - JestHttpClient.constructHttpMethod(125) | DELETE method created based on client request
DEBUG - AbstractJestClient.createNewElasticSearchResult(68) | Request and operation succeeded
DEBUG - AbstractAction.buildURI(160) | Created uri: news
DEBUG - JestHttpClient.constructHttpMethod(121) | PUT method created based on client request
DEBUG - AbstractJestClient.createNewElasticSearchResult(68) | Request and operation succeeded
DEBUG - JestHttpClient.constructHttpMethod(116) | POST method created based on client request

DEBUG - AbstractJestClient.createNewElasticSearchResult(68) | Request and operation succeeded
time:198335mm

搜索
DEBUG - JestClientFactory.getObject(37) | Creating HTTP client based on configuration
DEBUG - JestClientFactory.getObject(63) | Default http client is created without multi threaded option
INFO - JestClientFactory.getObject(89) | Node Discovery Disabled...
DEBUG - Search.getURI(111) | Created URI for search action is : news/news/_search
DEBUG - JestHttpClient.constructHttpMethod(116) | POST method created based on client request
DEBUG - AbstractJestClient.createNewElasticSearchResult(68) | Request and operation succeeded
在100万条记录中,搜索新闻,共用时间 -->> 473 毫秒
1   Kimiy Boy Girl   The Lord of the Rings is an epic high fantasy novel written by English philologist and University of Oxford professor J. R. R. Tolkien. The story began as a sequel to Tolkien's 1937 children's fantasy novel The Hobbit, but eventually developed into a much larger work. It was written in stages between 1937 and 1949, much of it during World War II.[1] It is the third best-selling novel ever written, with over 150 million copies sold.

使用了Jest一定程度上也降低了作为初学者了解JAVA API的痛苦,很多ES的JAVA API都不太了解。

  • 大小: 17.7 KB
分享到:
评论
2 楼 jkbjxy 2013-11-11  
aunox 写道
jest-0.0.3.jar开发包在哪里下载?

http://blog.mkfree.com/posts/38参考这篇文章,讲的很详细,然后附有源码,里面有这个包。
1 楼 aunox 2013-11-04  
jest-0.0.3.jar开发包在哪里下载?

相关推荐

    Vue.js精讲视频教程(包含源码-视频-笔记) .docx

    - **单元测试**:Vue Test Utils与Jest配合使用,可以对Vue组件进行单元测试。 - **项目实战**:通过实际项目实践,理解如何运用Vue.js构建复杂的应用程序。 #### 四、Vue.js生态工具链 - **脚手架工具**:Vue CLI...

    尚硅谷react 高清视频

    - **单元测试**:可以使用Jest和Enzyme等工具来进行单元测试,确保每个组件按预期工作。 - **集成测试**:使用Cypress等工具来进行集成测试,验证整个应用的功能是否正常。 综上所述,React凭借其强大的组件化能力...

    firstTest:使用现代工具和github进行首次测试。 这没东西看

    在IT行业中,尤其是在软件开发...总的来说,"firstTest"项目是一个学习和实践JavaScript测试的好机会,结合GitHub的使用,可以提升版本控制和协作能力。通过编写和运行测试,我们可以确保代码的质量,并逐步完善项目。

    03-vuecli3.rar

    Vue CLI 3 是一个强大的命令行工具,用于快速搭建 Vue.js 项目。它极大地简化了 Vue.js 应用程序的初始设置,提供了丰富的插件生态...学习 Vue CLI 3 的相关笔记将有助于深入理解这些概念,并有效地应用于项目开发中。

    一个小功能的实现 请看看

    本项目标题为“一个小功能的实现 请看看”,描述中提到这是作者初次尝试且出于娱乐目的,这反映出一个开发者从零开始学习和实践的过程。下面我们将深入探讨功能实现这一主题,以及可能涉及的相关技术与步骤。 首先...

    go-chat:学习React应用的go,react-router和服务器端渲染

    项目可能包含了单元测试、集成测试,确保各个功能模块的正确性,并可能使用Jest、Mocha等测试框架配合Chai、Enzyme等工具进行测试。 总的来说,Go-Chat项目是一个综合性的实践,涵盖了前端开发、后端开发、数据库...

    前端开源库-merino

    8. **测试框架集成**:为了确保代码的质量,Merino可能集成了Jest、Mocha等测试框架,方便进行单元测试和集成测试。 9. **性能优化**:Merino可能通过代码分割、懒加载等方式来优化应用性能,降低首次加载的时间,...

    react-weather:使用react-js创建的天气应用

    10. **测试**:为确保应用的功能正确无误,开发者可能会使用 Jest 和 Enzyme 进行单元测试和集成测试。 在 `react-weather-master` 压缩包中,通常会包含以下文件和目录: - `src` 目录:存放源代码,包括组件、...

    seamless-oneclick-chrome:一键购买按钮,无缝连接

    9. **用户权限和授权**:了解如何在用户首次使用时获取必要的权限,如访问浏览器历史记录或存储用户数据。 10. **自动化测试**:使用Mocha、Jest等测试框架编写单元测试和集成测试,确保代码质量和功能的稳定性。 ...

    movieAuction:一个用于运行和管理夏季电影草稿的 JavaScript 网络应用程序

    数据库方面,考虑到存储拍卖记录、用户信息以及电影详情等数据的需求,可能使用了MongoDB或者MySQL,它们都是与Node.js兼容的数据库系统,能高效地存储和检索大量数据。 在安全性方面,考虑到用户认证和授权的需求...

    Portfolio:版本1

    6. 测试与调试:为了保证软件质量,项目可能包含测试用例和测试框架,如JUnit、Mocha或Jest,以及日志记录和调试工具。 7. 文档编写:完整的项目通常会附带详细的文档,如README、API文档、用户手册等,这体现了...

    covid-nextJS-mur

    【标题】"covid-nextJS-mur" 是一个基于 Next.js 框架构建的项目,主要用于...通过学习和分析 "covid-nextJS-mur" 项目,开发者可以深入了解如何使用 Next.js 构建数据驱动的 Web 应用,并掌握现代前端开发的最佳实践。

    jardin-client:SPA React应用程序

    开发流程通常涉及编写组件、测试(如Jest和Enzyme)、调试(Chrome DevTools)、部署(如GitHub Pages、Netlify或AWS S3)等步骤。 **学习和实践:** 对于初学者,了解React的基本概念和组件化编程方式是基础。...

    notes-app:做笔记的应用程序以测试技能

    在IT行业中,构建一个笔记应用程序,如"notes-app",是一项常见的项目,它涉及到许多关键技术和实践。这个项目主要用于测试开发者的技术能力,包括前端、后端、数据库管理、用户界面设计以及应用程序的测试和调试。...

    第一个项目

    初学者可能会在这里找到.git文件夹,这是Git的配置和历史记录所在,表明项目使用了Git进行版本控制。 3. **编程语言**: - 未提供具体标签,但根据常见情况,"第一个项目"可能是用Python、Java、JavaScript或C++等...

    NodeJs-Demo:这是NodeJS项目,数据库MySQL

    10. **测试**:可能包括单元测试和集成测试,使用Mocha、Jest等工具确保代码质量。 这个项目对于初学者来说是一个很好的起点,通过实践可以深入理解Node.js和JavaScript在服务器端的应用,同时也能学习到如何与...

    AppListaGastosReact

    这个应用可能使用状态来跟踪用户的支出记录,而属性则用于传递必要的配置或数据。 4. **生命周期方法**:React组件有多个生命周期方法,如`componentDidMount`、`componentDidUpdate`和`componentWillUnmount`,...

    react-frontend-site

    10. **优化**:React应用可能采用了代码分割、懒加载、服务端渲染等技术来提升性能,比如使用`import()`动态导入组件,减少初次加载时间。 理解以上知识点,你就能更好地了解和操作"react-frontend-site"项目。这个...

    react_weater:Weater App

    `react_weater`可能使用Jest或Enzyme进行测试。同时,通过代码优化,如代码分割、懒加载和使用PureComponents,可以提高应用的加载速度和性能。 通过分析`react_weater`项目,我们可以学习到React的多种实践技巧,...

    QandA

    这个项目旨在帮助用户创建、存储和管理各种问题与答案,适合教育环境或者个人学习使用。以下是关于这个项目的详细知识点: 1. **JavaScript**: 作为项目的主要编程语言,JavaScript是一种广泛使用的解释型编程语言...

Global site tag (gtag.js) - Google Analytics