JestClient
JestService.java
[html] view plain copy 在CODE上查看代码片派生到我的代码片
public class JestService {
/**
* 获取JestClient对象
* @return
*/
public JestClient getJestClient() {
JestClientFactory factory = new JestClientFactory();
factory.setHttpClientConfig(new HttpClientConfig
.Builder("http://localhost:9200")
.gson(new GsonBuilder().setDateFormat("yyyy-MM-dd'T'hh:mm:ss").create())
.connTimeout(1500)
.readTimeout(3000)
.multiThreaded(true)
.build());
return factory.getObject();
}
/**
* 创建索引
* @param jestClient
* @param indexName
* @return
* @throws Exception
*/
public boolean createIndex(JestClient jestClient, String indexName) throws Exception {
JestResult jr = jestClient.execute(new CreateIndex.Builder(indexName).build());
return jr.isSucceeded();
}
/**
* Put映射
* @param jestClient
* @param indexName
* @param typeName
* @param source
* @return
* @throws Exception
*/
public boolean createIndexMapping(JestClient jestClient, String indexName, String typeName, String source) throws Exception {
PutMapping putMapping = new PutMapping.Builder(indexName, typeName, source).build();
JestResult jr = jestClient.execute(putMapping);
return jr.isSucceeded();
}
/**
* Get映射
* @param jestClient
* @param indexName
* @param typeName
* @return
* @throws Exception
*/
public String getIndexMapping(JestClient jestClient, String indexName, String typeName) throws Exception {
GetMapping getMapping = new GetMapping.Builder().addIndex(indexName).addType(typeName).build();
JestResult jr = jestClient.execute(getMapping);
return jr.getJsonString();
}
/**
* 索引文档
* @param jestClient
* @param indexName
* @param typeName
* @param objs
* @return
* @throws Exception
*/
public boolean index(JestClient jestClient, String indexName, String typeName, List<Object> objs) throws Exception {
Bulk.Builder bulk = new Bulk.Builder().defaultIndex(indexName).defaultType(typeName);
for (Object obj : objs) {
Index index = new Index.Builder(obj).build();
bulk.addAction(index);
}
BulkResult br = jestClient.execute(bulk.build());
return br.isSucceeded();
}
/**
* 搜索文档
* @param jestClient
* @param indexName
* @param typeName
* @param query
* @return
* @throws Exception
*/
public SearchResult search(JestClient jestClient, String indexName, String typeName, String query) throws Exception {
Search search = new Search.Builder(query)
.addIndex(indexName)
.addType(typeName)
.build();
return jestClient.execute(search);
}
/**
* Count文档
* @param jestClient
* @param indexName
* @param typeName
* @param query
* @return
* @throws Exception
*/
public Double count(JestClient jestClient, String indexName, String typeName, String query) throws Exception {
Count count = new Count.Builder()
.addIndex(indexName)
.addType(typeName)
.query(query)
.build();
CountResult results = jestClient.execute(count);
return results.getCount();
}
/**
* Get文档
* @param jestClient
* @param indexName
* @param typeName
* @param id
* @return
* @throws Exception
*/
public JestResult get(JestClient jestClient, String indexName, String typeName, String id) throws Exception {
Get get = new Get.Builder(indexName, id).type(typeName).build();
return jestClient.execute(get);
}
/**
* Delete索引
* @param jestClient
* @param indexName
* @return
* @throws Exception
*/
public boolean delete(JestClient jestClient, String indexName) throws Exception {
JestResult jr = jestClient.execute(new DeleteIndex.Builder(indexName).build());
return jr.isSucceeded();
}
/**
* Delete文档
* @param jestClient
* @param indexName
* @param typeName
* @param id
* @return
* @throws Exception
*/
public boolean delete(JestClient jestClient, String indexName, String typeName, String id) throws Exception {
DocumentResult dr = jestClient.execute(new Delete.Builder(id).index(indexName).type(typeName).build());
return dr.isSucceeded();
}
/**
* 关闭JestClient客户端
* @param jestClient
* @throws Exception
*/
public void closeJestClient(JestClient jestClient) throws Exception {
if (jestClient != null) {
jestClient.shutdownClient();
}
}
}
(3)UserTest.java
[html] view plain copy 在CODE上查看代码片派生到我的代码片
public class UserTest {
private JestService jestService;
private JestClient jestClient;
private String indexName = "hwd";
private String typeName = "user";
@Before
public void setUp() throws Exception {
jestService = new JestService();
jestClient = jestService.getJestClient();
}
@After
public void tearDown() throws Exception {
jestService.closeJestClient(jestClient);
}
@Test
public void createIndex() throws Exception {
boolean result = jestService.createIndex(jestClient, indexName);
System.out.println(result);
}
@Test
public void createIndexMapping() throws Exception {
String source = "{\"" + typeName + "\":{\"properties\":{"
+ "\"id\":{\"type\":\"integer\"}"
+ ",\"name\":{\"type\":\"string\",\"index\":\"not_analyzed\"}"
+ ",\"birth\":{\"type\":\"date\",\"format\":\"strict_date_optional_time||epoch_millis\"}"
+ "}}}";
System.out.println(source);
boolean result = jestService.createIndexMapping(jestClient, indexName, typeName, source);
System.out.println(result);
}
@Test
public void getIndexMapping() throws Exception {
String result = jestService.getIndexMapping(jestClient, indexName, typeName);
System.out.println(result);
}
@Test
public void index() throws Exception {
List<Object> objs = new ArrayList<Object>();
objs.add(new User(1, "T:o\"m-", new Date()));
objs.add(new User(2, "J,e{r}r;y:", new Date()));
boolean result = jestService.index(jestClient, indexName, typeName, objs);
System.out.println(result);
}
@Test
public void termQuery() throws Exception {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
QueryBuilder queryBuilder = QueryBuilders
.termQuery("name", "T:o\"m-");//单值完全匹配查询
searchSourceBuilder.query(queryBuilder);
searchSourceBuilder.size(10);
searchSourceBuilder.from(0);
String query = searchSourceBuilder.toString();
System.out.println(query);
SearchResult result = jestService.search(jestClient, indexName, typeName, query);
List<Hit<User, Void>> hits = result.getHits(User.class);
System.out.println("Size:" + hits.size());
for (Hit<User, Void> hit : hits) {
User user = hit.source;
System.out.println(user.toString());
}
}
@Test
public void termsQuery() throws Exception {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
QueryBuilder queryBuilder = QueryBuilders
.termsQuery("name", new String[]{ "T:o\"m-", "J,e{r}r;y:" });//多值完全匹配查询
searchSourceBuilder.query(queryBuilder);
searchSourceBuilder.size(10);
searchSourceBuilder.from(0);
String query = searchSourceBuilder.toString();
System.out.println(query);
SearchResult result = jestService.search(jestClient, indexName, typeName, query);
List<Hit<User, Void>> hits = result.getHits(User.class);
System.out.println("Size:" + hits.size());
for (Hit<User, Void> hit : hits) {
User user = hit.source;
System.out.println(user.toString());
}
}
@Test
public void wildcardQuery() throws Exception {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
QueryBuilder queryBuilder = QueryBuilders
.wildcardQuery("name", "*:*");//通配符和正则表达式查询
searchSourceBuilder.query(queryBuilder);
searchSourceBuilder.size(10);
searchSourceBuilder.from(0);
String query = searchSourceBuilder.toString();
System.out.println(query);
SearchResult result = jestService.search(jestClient, indexName, typeName, query);
List<Hit<User, Void>> hits = result.getHits(User.class);
System.out.println("Size:" + hits.size());
for (Hit<User, Void> hit : hits) {
User user = hit.source;
System.out.println(user.toString());
}
}
@Test
public void prefixQuery() throws Exception {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
QueryBuilder queryBuilder = QueryBuilders
.prefixQuery("name", "T:o");//前缀查询
searchSourceBuilder.query(queryBuilder);
searchSourceBuilder.size(10);
searchSourceBuilder.from(0);
String query = searchSourceBuilder.toString();
System.out.println(query);
SearchResult result = jestService.search(jestClient, indexName, typeName, query);
List<Hit<User, Void>> hits = result.getHits(User.class);
System.out.println("Size:" + hits.size());
for (Hit<User, Void> hit : hits) {
User user = hit.source;
System.out.println(user.toString());
}
}
@Test
public void rangeQuery() throws Exception {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
QueryBuilder queryBuilder = QueryBuilders
.rangeQuery("birth")
.gte("2016-09-01T00:00:00")
.lte("2016-10-01T00:00:00")
.includeLower(true)
.includeUpper(true);//区间查询
searchSourceBuilder.query(queryBuilder);
searchSourceBuilder.size(10);
searchSourceBuilder.from(0);
String query = searchSourceBuilder.toString();
System.out.println(query);
SearchResult result = jestService.search(jestClient, indexName, typeName, query);
List<Hit<User, Void>> hits = result.getHits(User.class);
System.out.println("Size:" + hits.size());
for (Hit<User, Void> hit : hits) {
User user = hit.source;
System.out.println(user.toString());
}
}
@Test
public void queryString() throws Exception {
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
QueryBuilder queryBuilder = QueryBuilders
.queryString(QueryParser.escape("T:o\""));//文本检索,应该是将查询的词先分成词库中存在的词,然后分别去检索,存在任一存在的词即返回,查询词分词后是OR的关系。需要转义特殊字符
searchSourceBuilder.query(queryBuilder);
searchSourceBuilder.size(10);
searchSourceBuilder.from(0);
String query = searchSourceBuilder.toString();
System.out.println(query);
SearchResult result = jestService.search(jestClient, indexName, typeName, query);
List<Hit<User, Void>> hits = result.getHits(User.class);
System.out.println("Size:" + hits.size());
for (Hit<User, Void> hit : hits) {
User user = hit.source;
System.out.println(user.toString());
}
}
@Test
public void count() throws Exception {
String[] name = new String[]{ "T:o\"m-", "Jerry" };
String from = "2016-09-01T00:00:00";
String to = "2016-10-01T00:00:00";
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
QueryBuilder queryBuilder = QueryBuilders.boolQuery()
.must(QueryBuilders.termsQuery("name", name))
.must(QueryBuilders.rangeQuery("birth").gte(from).lte(to));
searchSourceBuilder.query(queryBuilder);
String query = searchSourceBuilder.toString();
System.out.println(query);
Double count = jestService.count(jestClient, indexName, typeName, query);
System.out.println("Count:" + count);
}
@Test
public void get() throws Exception {
String id = "2";
JestResult result = jestService.get(jestClient, indexName, typeName, id);
if (result.isSucceeded()) {
User user = result.getSourceAsObject(User.class);
System.out.println(user.toString());
}
}
@Test
public void deleteIndexDocument() throws Exception {
String id = "2";
boolean result = jestService.delete(jestClient, indexName, typeName, id);
System.out.println(result);
}
@Test
public void deleteIndex() throws Exception {
boolean result = jestService.delete(jestClient, indexName);
System.out.println(result);
}
}
JestClient的更多相关文章
- JestClient 使用教程,教你完成大部分ElasticSearch的操作。
本篇文章代码实现不多,主要是教你如何用JestClient去实现ElasticSearch上的操作. 授人以鱼不如授人以渔. 一.说明 1.elasticsearch版本:6.2.4 . jdk版本: ...
- elasticsearch jestclient api
1.es search sroll 可以遍历索引下所有数据 public class TestDemo { @Test public void searchSroll() { JestClientFa ...
- 3.2_springBoot2.1.x检索之JestClient操作ElasticSearch
这里介绍Jest方式交互, 导入jest版本 <!--导入jest--> <dependency> <groupId>io.searchbox</groupI ...
- elasticsearch scroll api--jestclient invoke
@Test public void testScroll(){ JestClientFactory factory = new JestClientFactory(); factory.setHttp ...
- jest for elasticsearch
*elasticsearch(后面简称es) 背景: 目前项目应用中对es的操作用的是http(自己封装)的一套方法:有些数据处理起来还是需要定制开发处理,不是很方便.正好需要对本项目重新进行改造,于 ...
- SpringBoot整合ElasticSearch实现多版本的兼容
前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...
- springboot 注册dao层 service 层
可以使用三种注解来引入DAO层的接口到spring容器中.1.@Mapper,写在每一个DAO层接口上,如下: 2.@MapperScan和@ComponentScan两者之一.前者的意义是将指定包中 ...
- Spring Boot 整合 elasticsearch
一.简介 我们的应用经常需要添加检索功能,开源的 ElasticSearch 是目前全文搜索引擎的 首选.他可以快速的存储.搜索和分析海量数据.Spring Boot通过整合Spring Data E ...
- 史上最全面的Elasticsearch使用指南
Elasticsearch使用指南 Elasticsearch使用指南 前言 ES是什么 什么是全文检索 ES的应用场景 ES的存储结构 第一章:安装 1.下载 2.解压 3.配置 4.启动 5.查看 ...
随机推荐
- Android 如何有效的解决内存泄漏的问题
前言:最近在研究Handler的知识,其中涉及到一个问题,如何避免Handler带来的内存溢出问题.在网上找了很多资料,有很多都是互相抄的,没有实际的作用. 本文的内存泄漏检测工具是:LeakCana ...
- Android无需申请权限拨打电话
Android打电话有两种实现方法: 第一种方法,拨打电话跳转到拨号界面.源代码如下: Intent intent = new Intent(Intent.ACTION_DIAL); Uri data ...
- iOS面试题 -总结 ,你的基础扎实吗?
1.#import和#include的区别,@class代表什么? (1)#import指令是Object-C针对#include的改进版本,#import确保引用的文件只会被引用一次,这样你就不会陷 ...
- UML类图关系全面剖析
UML的类图关系分为: 关联.聚合/组合.依赖.泛化(继承).而其中关联又分为双向关联.单向关联.自身关联:下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里. 1.关联 双向关联:C1- ...
- MySql索引总结
索引概念 B+树索引分为聚集索引和非聚集索引(辅助索引),但是两者的数据结构都和B+树一样,区别是存放的内容. 可以说数据库必须有索引,没有索引则检索过程变成了顺序查找,O(n)的时间复杂度几乎是不能 ...
- Centos 6.5 Percona 5.6.27 Tokudb 配置
参考 https://www.percona.com/doc/percona-server/5.6/tokudb/tokudb_installation.html # wget https://www ...
- tomcat优化
tomcat优化:vim catalina.sh添加:JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -X ...
- nginx整理
一.为什么选择Nginx搭建Web服务器 Apache和Nginx是目前使用最火的两种Web服务器,Apache出现比Nginx早.Apache HTTP Server(简称Apache)是世界使用排 ...
- 安装Windows更新程序遇到错误:0x80070422
看看服务那里 windows update服务是不是被禁用了? 还有一个问题可能是由于Windows Modules Installer被禁用了.
- 《----css样式---------浮动带来的影响与解决方法---------------》
浮动就是让我们的元素脱离标准文档流,目的是为了布局好看! 浮动的现象: 脱离标准文档流被叫做脱流,同时会出现字围现象. 浮动的元素会相互贴靠,而且如果父容器空间足够大,则浮动的元素会正常紧靠也就是后一 ...