ElasticSearch(ES) 是开源(apache 2 授权)、分布式、REST风格、搜索引擎基于Lucene的实现。
Jest是一个为ES操作Java Http Rest 的客户端,及使用它来捕获、存储以及操作数据。
Jest提供JavaAPI,可以很好的处理Java对象序列。通过Jest,可以获取普通的Java对象并在ES中为它们建立索引。然后使用ES的搜索API,将您的返回的对象转换Java对象。
可以通过Andrew Glover来阅读ES和Jest
安装说明
Jest Maven 托管在 Sonatype.
配置pom.xml 文件
1
2
3
4
5
6
7
8
9
10
11
|
< repositories >
. . < repository >
< id >sonatype</ id >
< name >Sonatype Groups</ name >
< url >https://oss.sonatype.org/content/groups/public/</ url >
</ repository >
. . </ repositories >
|
添加依赖
1
2
3
4
5
|
< dependency >
< groupId >io.searchbox</ groupId >
< artifactId >jest</ artifactId >
< version >0.0.3</ version >
</ dependency >
|
更新日志 changelog
Jest 有一个简单的实例,请看这里 --->
使用Jest之前要需要一个JestClient
1
2
3
4
5
6
7
8
9
10
11
|
// Configuration ClientConfig clientConfig = new ClientConfig();
LinkedHashSet<String> servers = new LinkedHashSet<String>();
servers.add( "http://localhost:9200" );
clientConfig.getProperties().put(ClientConstants.SERVER_LIST, servers); clientConfig.getProperties().put(ClientConstants.IS_MULTI_THREADED, true );
// Construct a new Jest client according to configuration via factory JestClientFactory factory = new JestClientFactory();
factory.setClientConfig(clientConfig); JestClient client = factory.getObject(); |
JestClient使用单例模式,构造器是私有。
开始创建索引
通过Jest创建Index是一件很轻松的事
1
|
client.execute( new CreateIndex( "articles" ));
|
设置ES参数,可以通过JSON完成
1
2
3
4
5
6
|
String settings = "\"settings\" : {\n" +
" \"number_of_shards\" : 5,\n" +
" \"number_of_replicas\" : 1\n" +
" }\n" ;
client.execute( new CreateIndex( "articles" ), settings)
|
或者通过SetingsBuilder,添加ES依赖设置API
1
2
3
4
5
6
7
8
9
|
import org.elasticsearch.common.settings.ImmutableSettings;
. . ImmutableSettings.Builder settingsBuilder = ImmutableSettings.settingsBuilder(); settings.put( "number_of_shards" , 5 );
settings.put( "number_of_replicas" , 1 );
client.execute( new CreateIndex( "articles" ), settingsBuilder.build().getAsMap());
|
索引文档
ES请求索引数据JSON格式,通过Jest的几种方法创建文档索引
1.JSON 字符串
1
|
String source = "{\"user\":\"kimchy\"}" ;
|
2.ES JSONBuilder
1
2
3
4
5
6
|
String source = jsonBuilder() .startObject() .field( "user" , "kimchy" )
.field( "postDate" , "date" )
.field( "message" , "trying out Elastic Search" )
.endObject().string(); |
3.Map
1
2
|
Map<String, String> source = new LinkedHashMap<String,String>()
source.put( "user" , "kimchy" );
|
4.POJO
1
2
3
|
Article source = new Article();
source.setAuthor( "John Ronald Reuel Tolkien" );
source.setContent( "The Lord of the Rings is an epic high fantasy novel" );
|
指定索引数据生成索引 为twitter index with type tweet
1
2
|
Index index = new Index.Builder(source).index( "twitter" ).type( "tweet" ).build();
client.execute(index); |
可以明确指定索引Id
1
2
|
Index index = new Index.Builder(source).index( "twitter" ).type( "tweet" ).id( "1" ).build();
client.execute(index); |
也可以通过Jest注解的方式指定索引Id
1
2
3
4
5
6
|
class Article {
@JestId private Long documentId;
} |
如果JestId 是null,则有ES自动生成Id。
搜索文档
通过Json 字符串搜索
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
String query = "{\n" +
" \"query\": {\n" +
" \"filtered\" : {\n" +
" \"query\" : {\n" +
" \"query_string\" : {\n" +
" \"query\" : \"test\"\n" +
" }\n" +
" },\n" +
" \"filter\" : {\n" +
" \"term\" : { \"user\" : \"kimchy\" }\n" +
" }\n" +
" }\n" +
" }\n" +
"}" ;
Search search = new Search(query);
// multiple index or types can be added. search.addIndex( "twitter" );
search.addType( "tweet" );
JestResult result = client.execute(search); |
使用SearchSourceBuilder
1
2
3
4
5
6
7
8
|
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchQuery( "user" , "kimchy" ));
Search search = new Search(searchSourceBuilder.toString());
search.addIndex( "twitter" );
search.addType( "tweet" );
JestResult result = client.execute(search); |
结果转换成对象
1
2
|
JestResult result = client.execute(search); List<Article> articles = result.getSourceAsObjectList(Article. class );
|
如果要阅读复杂的查询,请这里走-->
获取索引文档
1
2
3
|
Get get = new Get.Builder( "1" ).index( "twitter" ).type( "tweet" ).build();
JestResult result = client.execute(get); |
结果转换成对象
1
2
3
4
5
|
Get get = new Get.Builder( "1" ).index( "twitter" ).type( "tweet" ).build();
JestResult result = client.execute(get); Article article = result.getSourceAsObject(Article. class );
|
更新索引文档
1
2
3
4
5
6
7
8
|
String script = "{\n" +
" \"script\" : \"ctx._source.tags += tag\",\n" +
" \"params\" : {\n" +
" \"tag\" : \"blue\"\n" +
" }\n" +
"}" ;
client.execute( new Update.Builder(script).index( "twitter" ).type( "tweet" ).id( "1" ).build());
|
删除文档
1
|
client.execute( new Delete.Builder( "1" ).index( "twitter" ).type( "tweet" ).build());
|
批量操作
通过API批量操作 index/delete 操作,可以大大增加索引速度。
1
2
3
4
5
6
7
|
Bulk bulk = new Bulk( "twitter" , "tweet" );
bulk.addIndex( new Index.Builder(article1).build());
bulk.addIndex( new Index.Builder(article2).build());
bulk.addDelete( new Delete.Builder( "1" ).build());
client.execute(bulk); |
集合批量操作
1
2
3
4
5
|
Bulk bulk = new Bulk( "twitter" , "tweet" );
Article article1 = new Article( "tweet1" );
Article article2 = new Article( "tweet1" );
bulk.addIndexList(Arrays.asList(article1, article2);); client.execute(bulk); |
设置参数
ElasticSearch要求参数来设置属性,如 routing, versioning 操作类型等
比如设置“refresh” 为 “true”
1
2
3
|
Index index = new Index.Builder( "{\"user\":\"kimchy\"}" ).index( "cvbank" ).type( "candidate" ).id( "1" ).build();
index.addParameter(Parameters.REFRESH, true );
client.execute(index); |
同步操作
Jest http Client 支持 blocking IO asynchronously.
使用Jest 同步操作实例
1
2
3
4
5
6
7
8
9
10
|
client.executeAsync(action, new JestResultHandler<JestResult>() {
@Override
public void completed(JestResult result) {
... do process result ....
}
@Override
public void failed(Exception ex) {
... catch exception ...
}
}); |
配置在同一网段内发下其它节点设置
1
2
3
4
|
//enable host discovery clientConfig.getProperties().put(ClientConstants.DISCOVERY_ENABLED, true ); //boolean
clientConfig.getProperties().put(ClientConstants.DISCOVERY_FREQUENCY, 1l); //long
clientConfig.getProperties().put(ClientConstants.DISCOVERY_FREQUENCY_TIMEUNIT, TimeUnit.MINUTES); |
http://my.oschina.net/shking/blog/133366
相关推荐
jest-6.3.1.zip 是一个压缩包文件,它包含 Jest 框架的两个特定版本的 JAR 文件:jest-6.3.1.jar 和 jest-common-6.3.1.jar。Jest 是一个广泛使用的JavaScript测试框架,特别适合于React应用程序的单元测试和集成...
本资源包含的是Jest客户端的全部依赖jar包,确保了在Java项目中使用Jest进行Elasticsearch操作时的完整性和稳定性。 首先,Jest客户端的核心功能在于其RESTful API的实现。REST(Representational State Transfer)...
在IT领域,Elasticsearch和Jest是两个非常重要的工具,尤其在大数据处理和搜索解决方案中扮演着关键角色。Elasticsearch是一个强大的分布式搜索引擎,而Jest则是一个Java库,作为与Elasticsearch进行交互的客户端。...
**Jest学习包详解** Jest是一款非常流行的JavaScript测试框架,尤其在React社区中被广泛使用。它由Facebook开发并维护,旨在提供一个简单、快速且全面的测试解决方案。本项目是GitHub上Jest的资源集合,对于学习和...
"Vue 项目使用 Jest 测试入门" 本文将为您介绍如何使用 Jest 进行 Vue 项目测试。Jest 是一个由 Facebook 发布的开源 JavaScript 单元测试框架,旨在减少开始测试一个项目所要花费的时间和认知负荷。 什么是 Jest...
**Elasticsearch-JestClient详解** Elasticsearch(简称ES)是一种流行的开源全文搜索引擎,它提供了高可扩展性、实时的搜索与分析能力。而JestClient是Java开发者用来与Elasticsearch通信的一个轻量级HTTP客户端库...
"es工具封装,最新的springboot集成jpa和jest,集群" 这个标题涵盖了几个关键点: 1. **ES工具封装**:指的是对Elasticsearch(ES)进行了一些定制化的开发,创建了便于使用的工具类或者库,以简化与ES交互的操作。 2...
**Jest:Facebook的JavaScript测试框架** Jest是一款由Facebook开发的开源JavaScript测试框架,它在测试领域中扮演着至关重要的角色。Jest以其全面的功能、易用性和高性能而受到广大开发者喜爱。这款测试工具旨在...
### Jest 快照测试详解 #### 一、背景与意义 在软件开发过程中,随着业务逻辑的不断迭代和发展,测试用例也需要随之调整以确保代码的稳定性和正确性。传统上,每次修改业务代码时,都需要手动更新相应的测试用例中...
【 Jest 单元测试教程详解】 在现代 JavaScript 开发中,单元测试是保障代码质量、稳定性和可维护性的重要手段。Jest 是 Facebook 推出的一款功能强大的 JavaScript 测试框架,它以其易用性、全面的功能和良好的...
当我们谈论“testvueapp使用Jest测试没有配置的Vuejs组件”时,这涉及到Vue.js项目中的单元测试和集成测试,以及如何利用Jest这个强大的测试框架来对Vue组件进行测试。在没有预先配置的情况下,我们需要手动设置测试...
开玩笑的python 开玩笑地执行python测试。...-save-dev jest将jest-python添加为jest运行程序在你的package.json " jest " : { " runner " : " jest-python " , " testMatch " : [ " **/test_*.py " ], " modul
这里我们关注的是如何使用Jest客户端将数据从Hive导入到Elasticsearch。Jest是一个Java REST客户端,它为Elasticsearch提供了一个简单易用的接口。以下是这个过程的详细步骤和相关知识点: 1. **Jest使用示例** ...
【 Jestlite:在浏览器中运行Jest的详细指南】 Jest 是一款广泛使用的JavaScript测试框架,它提供了丰富的功能,如自动模拟(mocking)、代码覆盖率报告以及快速的测试执行。然而,Jest 默认是在Node.js环境中运行...
spring-data-jest, Jest的Spring Data 实现 Spring Data Jest 基于on客户端的ElasticSearch的Spring Data 实现仅在 HTTP ( 例如AWS上) 可以访问的情况下使用 Spring Data 和ElasticSearch群集。
`jest-preset-angular` 是一个专门为 Angular 应用程序设计的 Jest 配置预设,它简化了在 Angular 项目中集成 Jest 测试框架的过程。Jest 是一款流行的JavaScript测试库,以其快速、全面的特性受到开发者喜爱。而 ...
它与Jest测试框架紧密集成,为开发者提供了直观、详细的测试结果输出,便于理解和分析测试性能。下面将详细介绍Jest HTML Reporter的功能、安装、配置以及使用方法。 ### 1. Jest 测试框架简介 Jest是一款广泛使用...
而`jest-axe`是专门为Jest设计的一个扩展库,它允许开发者将可访问性测试集成到Jest的测试套件中,从而确保代码符合WCAG(Web Content Accessibility Guidelines)标准。 `jest-axe`的核心功能是利用`axe-core`库,...
通过Jest和Junit单元测试的方法创建索引和检索 第一步:启动一个elasticsearch服务,bin目录下的elasticsearch.bat 第二步:建索引,执行MusicReviewIndex中的单元测试方法index() 第三步:检索测试,执行...