博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jest
阅读量:7238 次
发布时间:2019-06-29

本文共 5971 字,大约阅读时间需要 19 分钟。

  hot3.png

ElasticSearch(ES) 是开源(apache 2 授权)、分布式、REST风格、搜索引擎基于Lucene的实现。

Jest是一个为ES操作Java Http Rest 的客户端,及使用它来捕获、存储以及操作数据。

Jest提供JavaAPI,可以很好的处理Java对象序列。通过Jest,可以获取普通的Java对象并在ES中为它们建立索引。然后使用ES的搜索API,将您的返回的对象转换Java对象。

可以通过来阅读ES和Jest

安装说明

 Jest Maven 托管在 .

配置pom.xml 文件

..
sonatype
Sonatype Groups
https://oss.sonatype.org/content/groups/public/
..

添加依赖

io.searchbox
jest
0.0.3

 更新日志

Jest 有一个简单的实例,请看这里

使用Jest之前要需要一个JestClient

// Configuration ClientConfig clientConfig = new ClientConfig(); LinkedHashSet
servers = new LinkedHashSet
(); 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是一件很轻松的事

client.execute(new CreateIndex("articles"));

设置ES参数,可以通过JSON完成

String settings = "\"settings\" : {\n" +                "        \"number_of_shards\" : 5,\n" +                "        \"number_of_replicas\" : 1\n" +                "    }\n";client.execute(new CreateIndex("articles"), settings)

或者通过SetingsBuilder,添加ES依赖设置API

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 字符串

String source = "{\"user\":\"kimchy\"}";

2.ES JSONBuilder

String source = jsonBuilder().startObject().field("user", "kimchy").field("postDate", "date").field("message", "trying out Elastic Search").endObject().string();

3.Map

Map
source = new LinkedHashMap
()source.put("user", "kimchy");

4.POJO

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

Index index = new Index.Builder(source).index("twitter").type("tweet").build();client.execute(index);

 可以明确指定索引Id

Index index = new Index.Builder(source).index("twitter").type("tweet").id("1").build();client.execute(index);

也可以通过Jest注解的方式指定索引Id

class Article {@JestIdprivate Long documentId;}

 如果JestId 是null,则有ES自动生成Id。

 

搜索文档

通过Json 字符串搜索

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

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);

 结果转换成对象

JestResult result = client.execute(search);List
articles = result.getSourceAsObjectList(Article.class);

如果要阅读复杂的查询,请这里走

获取索引文档

Get get = new Get.Builder("1").index("twitter").type("tweet").build();JestResult result = client.execute(get);

结果转换成对象

Get get = new Get.Builder("1").index("twitter").type("tweet").build();JestResult result = client.execute(get);Article article = result.getSourceAsObject(Article.class);

更新索引文档

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());

删除文档

client.execute(new Delete.Builder("1").index("twitter").type("tweet").build());

批量操作

通过API批量操作 index/delete 操作,可以大大增加索引速度。

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);

集合批量操作

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”

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 同步操作实例

client.executeAsync(action,new JestResultHandler
() { @Override public void completed(JestResult result) { ... do process result .... } @Override public void failed(Exception ex) { ... catch exception ... }});

配置在同一网段内发下其它节点设置

//enable host discoveryclientConfig.getProperties().put(ClientConstants.DISCOVERY_ENABLED, true);      //booleanclientConfig.getProperties().put(ClientConstants.DISCOVERY_FREQUENCY, 1l);      //longclientConfig.getProperties().put(ClientConstants.DISCOVERY_FREQUENCY_TIMEUNIT, TimeUnit.MINUTES); //timeunit

 source

转载于:https://my.oschina.net/shking/blog/133366

你可能感兴趣的文章
rails文件夹介绍
查看>>
团对-爬取豆瓣电影top250-开发环境搭建过程
查看>>
apache2.2安装和配置(安装版)
查看>>
轻触开关实现自锁功能
查看>>
浏览器加载显示html页面内容的顺序
查看>>
(八)mybatis之映射器
查看>>
OOP design table chair bench
查看>>
Quartz学习笔记
查看>>
jQuery
查看>>
aix lvm_lv_vg
查看>>
sudo nopasswd
查看>>
Scrapy命令和备注
查看>>
MySql
查看>>
Spring和springMVC父子容器的关系
查看>>
计算机图形学常用算法
查看>>
systemd自启动java程序
查看>>
Spring Boot 项目中使用JSP
查看>>
property干嘛的
查看>>
在香港五星级酒店里‘赏’早餐
查看>>
[转载] New Concept English 1——Lesson 5 Nice to meet you
查看>>