`
m635674608
  • 浏览: 5026932 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Jest

 
阅读更多

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

 

分享到:
评论
2 楼 m635674608 2017-12-08  
lvyuan1234 写道
jestclient是单例的,当并发调用时该如何处理?

内部有连接池的
1 楼 lvyuan1234 2017-11-30  
jestclient是单例的,当并发调用时该如何处理?

相关推荐

    jest-6.3.1.zip

    jest-6.3.1.zip 是一个压缩包文件,它包含 Jest 框架的两个特定版本的 JAR 文件:jest-6.3.1.jar 和 jest-common-6.3.1.jar。Jest 是一个广泛使用的JavaScript测试框架,特别适合于React应用程序的单元测试和集成...

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

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

    jest-client.7z

    在IT领域,Elasticsearch和Jest是两个非常重要的工具,尤其在大数据处理和搜索解决方案中扮演着关键角色。Elasticsearch是一个强大的分布式搜索引擎,而Jest则是一个Java库,作为与Elasticsearch进行交互的客户端。...

    jest学习包吧

    **Jest学习包详解** Jest是一款非常流行的JavaScript测试框架,尤其在React社区中被广泛使用。它由Facebook开发并维护,旨在提供一个简单、快速且全面的测试解决方案。本项目是GitHub上Jest的资源集合,对于学习和...

    vue项目使用Jest测试入门.docx

    "Vue 项目使用 Jest 测试入门" 本文将为您介绍如何使用 Jest 进行 Vue 项目测试。Jest 是一个由 Facebook 发布的开源 JavaScript 单元测试框架,旨在减少开始测试一个项目所要花费的时间和认知负荷。 什么是 Jest...

    Elasticsearch-JestClient

    **Elasticsearch-JestClient详解** Elasticsearch(简称ES)是一种流行的开源全文搜索引擎,它提供了高可扩展性、实时的搜索与分析能力。而JestClient是Java开发者用来与Elasticsearch通信的一个轻量级HTTP客户端库...

    es工具封装,最新的springboot集成jpa和jest,集群

    "es工具封装,最新的springboot集成jpa和jest,集群" 这个标题涵盖了几个关键点: 1. **ES工具封装**:指的是对Elasticsearch(ES)进行了一些定制化的开发,创建了便于使用的工具类或者库,以简化与ES交互的操作。 2...

    Jest来自facebook的JavaScript测试

    **Jest:Facebook的JavaScript测试框架** Jest是一款由Facebook开发的开源JavaScript测试框架,它在测试领域中扮演着至关重要的角色。Jest以其全面的功能、易用性和高性能而受到广大开发者喜爱。这款测试工具旨在...

    Jest快照测试.md

    ### Jest 快照测试详解 #### 一、背景与意义 在软件开发过程中,随着业务逻辑的不断迭代和发展,测试用例也需要随之调整以确保代码的稳定性和正确性。传统上,每次修改业务代码时,都需要手动更新相应的测试用例中...

    jest单元测试教程

    【 Jest 单元测试教程详解】 在现代 JavaScript 开发中,单元测试是保障代码质量、稳定性和可维护性的重要手段。Jest 是 Facebook 推出的一款功能强大的 JavaScript 测试框架,它以其易用性、全面的功能和良好的...

    testvueapp使用Jest测试没有配置的Vuejs组件

    当我们谈论“testvueapp使用Jest测试没有配置的Vuejs组件”时,这涉及到Vue.js项目中的单元测试和集成测试,以及如何利用Jest这个强大的测试框架来对Vue组件进行测试。在没有预先配置的情况下,我们需要手动设置测试...

    jest-python:使编写JSTS测试到Python的工作变得轻松

    开玩笑的python 开玩笑地执行python测试。...-save-dev jest将jest-python添加为jest运行程序在你的package.json " jest " : { " runner " : " jest-python " , " testMatch " : [ " **/test_*.py " ], " modul

    用jest客户端将数据从hive导入elasticsearch

    这里我们关注的是如何使用Jest客户端将数据从Hive导入到Elasticsearch。Jest是一个Java REST客户端,它为Elasticsearch提供了一个简单易用的接口。以下是这个过程的详细步骤和相关知识点: 1. **Jest使用示例** ...

    jestlite实现在浏览器中运行Jest

    【 Jestlite:在浏览器中运行Jest的详细指南】 Jest 是一款广泛使用的JavaScript测试框架,它提供了丰富的功能,如自动模拟(mocking)、代码覆盖率报告以及快速的测试执行。然而,Jest 默认是在Node.js环境中运行...

    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群集。

    jestpresetangularAngular项目Jest配置的预设

    `jest-preset-angular` 是一个专门为 Angular 应用程序设计的 Jest 配置预设,它简化了在 Angular 项目中集成 Jest 测试框架的过程。Jest 是一款流行的JavaScript测试库,以其快速、全面的特性受到开发者喜爱。而 ...

    前端开源库-jest-html-reporter

    它与Jest测试框架紧密集成,为开发者提供了直观、详细的测试结果输出,便于理解和分析测试性能。下面将详细介绍Jest HTML Reporter的功能、安装、配置以及使用方法。 ### 1. Jest 测试框架简介 Jest是一款广泛使用...

    jestaxe定制Jest匹配器用于测试可访问性

    而`jest-axe`是专门为Jest设计的一个扩展库,它允许开发者将可访问性测试集成到Jest的测试套件中,从而确保代码符合WCAG(Web Content Accessibility Guidelines)标准。 `jest-axe`的核心功能是利用`axe-core`库,...

    elasticsearch java客户端Jest入门实例

    通过Jest和Junit单元测试的方法创建索引和检索 第一步:启动一个elasticsearch服务,bin目录下的elasticsearch.bat 第二步:建索引,执行MusicReviewIndex中的单元测试方法index() 第三步:检索测试,执行...

Global site tag (gtag.js) - Google Analytics