• elastissearch的JAVA客户端

官网  java api文档  https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/client.html

    <dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</dependency>

目前有4种:

TransportClient、JestClient、RestClient(一种网络请求,非集群中的一员)

NodeClient(集群中一员,但不存储数据,可以查看集群的状况)

这几个都需要引入对应的Client,同时要引入Netty,因为是基于netty进行网络通信。以TransportClient为例:

    <dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.2.</version>
</dependency>
<dependency>
  <groupId>io.netty</groupId>
  <artifactId>netty-buffer</artifactId>
  <version>4.1.28.Final</version>
</dependency>

TransportClient 连接方式有3种,具体参见以下官网连接的例子

https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/transport-client.html

代码测试连接:

    @RequestMapping("/connTest")
public String connectEs() {
String result = "failure";
Settings settings = Settings.builder()
.put("cluster.name", "es_test")
.put("client.transport.ping_timeout", "3s")                     //default 5s
.put("client.transport.sniff", true) //嗅探会自动发现集成的其它ip,只需要设置一个master就可以通过嗅味带出其它的
.build();
TransportClient client = new PreBuiltTransportClient(settings);
try {
client.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.201.105"), ));
List<DiscoveryNode> nodeList = client.connectedNodes();
if(nodeList != null && nodeList.size() > ) {
result = "success";
}
client.close();
} catch (UnknownHostException e) {
System.out.println(e);
result = "failure";
} return result;
}

一般client被设置为单例模式。

查询:

prepareGet

GET

        GetRequestBuilder reqBuilder = transportClient.prepareGet("ik_test", "type1", "kI1COGUB9PG2P1x3QBda");
Map<String, Object> mapResult = reqBuilder.get().getSource()

UPDATE

        XContentBuilder source = XContentFactory.jsonBuilder()
.startObject()
.field("name", "8月金融数据政策寒冬")
.field("title", "中国人民银行报道")
.field("content", "社会融资坏账率明显增多")
.endObject();
UpdateResponse updateResp = transportClient.prepareUpdate("ik_test", "type1", "kI1COGUB9PG2P1x3QBda").setDoc(source).get();
Result result = updateResp.getResult();

IndexRequest :source

注意 setSource(object...) 是 传入的 key,value,key,value,key,value.....

        // key value ...
transportClient.prepareIndex("ik_test", "type1").setSource("title","BBC报道","name", "the blue planet", "content", "蓝色星球讲述海洋天空大地,以及人类环境对整个地球的影响").get();
// json
IkTestVO vo2 = new IkTestVO("VOA报道", "it's a channel to learn english", "一家做voa报道学习英文用");
transportClient.prepareIndex("ik_test", "type1").setSource(mapper.writeValueAsString(vo2), XContentType.JSON).get();
//map
Map<String, Object> vo3 = new HashMap<String, Object>();
vo3.put("title", "美国之音");
vo3.put("name", "美国之音广播电台");
vo3.put("content", "讲述美国文化生活");
transportClient.prepareIndex("ik_test", "type1").setSource(vo3).get();
//XcontentBuilder
XContentBuilder vo4 = XContentFactory.jsonBuilder()
.startObject()
.field("name", "9月金融数据政策寒冬")
.field("title", "中国证监会")
.field("content", "对于明星涉嫌非法股票套取交易的处罚规定")
.endObject();
transportClient.prepareIndex("ik_test", "type1").setSource(vo4).get();

 DELETE

transportClient.prepareDelete().setIndex("ik_test").setId("DTbzVWUBIcwRDuO5OPIA").setType("type1").get();

BULK

        BulkRequestBuilder reqBuilder = transportClient.prepareBulk();
// IndexRequest
IndexRequest indexReq = new IndexRequest("ik_test","type1");
IkTestVO vo = new IkTestVO("ABC报道", "the blue planet", "蓝色星球讲述海洋天空大地,以及人类环境对整个地球的影响");
indexReq.source(mapper.writeValueAsString(vo), XContentType.JSON); // DeleteRequest
DeleteRequest delReq = new DeleteRequest("ik_test","type1","DTbzVWUBIcwRDuO5OPIA"); // UpdateRequest
UpdateRequest updReq = new UpdateRequest("ik_test","type1", "DzYJVmUBIcwRDuO5U_If");
Map<String, Object> vo3 = new HashMap<String, Object>();
vo3.put("title", "美国之音2");
vo3.put("name", "美国之音广播电台2");
vo3.put("content", "讲述美国文化生活2");
updReq.doc(vo3); reqBuilder.add(indexReq);
reqBuilder.add(delReq);
reqBuilder.add(updReq);
BulkResponse bulkResp = reqBuilder.get();

prepareSearch

    @Test
public void testSearch() {
SearchResponse search = transportClient.prepareSearch("ik_test")
.setQuery(QueryBuilders.matchQuery("title", "美国"))
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setFrom()
.setSize()
.get();
SearchHits hits = search.getHits();
long count = hits.getTotalHits();
System.out.println("count: " + count);
if(count > ) {
for(SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
}
}

结果:

count:
{"name":"美国之音广播电台2","title":"美国之音2","content":"讲述美国文化生活2"}

 SearchType:

es的四种查询类型SearchType:

  • QUERY_AND_FETCH  (由主节点分发查询,然后再汇总查询。 仅查一次,数据量和排序问题)@deprecated
  • QUERY_THEN_FETCH(主节点分发查询,汇总分查询的id,然后再查询数据, 查两次。同样牵扯数据量和排序) 默认形式DEFAULT
  • DFS_QUERY_THEN_FETCH (解决排序和数据量,但是运行效率差)

QueryBuilders:

  参看类文件说明

elasticsearch-java的更多相关文章

  1. [搜索]ElasticSearch Java Api(一) -添加数据创建索引

    转载:http://blog.csdn.net/napoay/article/details/51707023 ElasticSearch JAVA API官网文档:https://www.elast ...

  2. Elasticsearch java api 基本搜索部分详解

    文档是结合几个博客整理出来的,内容大部分为转载内容.在使用过程中,对一些疑问点进行了整理与解析. Elasticsearch java api 基本搜索部分详解 ElasticSearch 常用的查询 ...

  3. Elasticsearch java api 常用查询方法QueryBuilder构造举例

    转载:http://m.blog.csdn.net/u012546526/article/details/74184769 Elasticsearch java api 常用查询方法QueryBuil ...

  4. Elasticsearch Java Rest Client API 整理总结 (二) —— SearchAPI

    目录 引言 Search APIs Search API Search Request 可选参数 使用 SearchSourceBuilder 构建查询条件 指定排序 高亮请求 聚合请求 建议请求 R ...

  5. Elasticsearch Java Rest Client API 整理总结 (三)——Building Queries

    目录 上篇回顾 Building Queries 匹配所有的查询 全文查询 Full Text Queries 什么是全文查询? Match 全文查询 API 列表 基于词项的查询 Term Term ...

  6. Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)

    elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介.Java REST Client.Java Client.Spri ...

  7. State of the official Elasticsearch Java clients

    Elasticsearch Java Clients | Elastic https://www.elastic.co/blog/state-of-the-official-elasticsearch ...

  8. 第08章 ElasticSearch Java API

    本章内容 使用客户端对象(client object)连接到本地或远程ElasticSearch集群. 逐条或批量索引文档. 更新文档内容. 使用各种ElasticSearch支持的查询方式. 处理E ...

  9. ElasticSearch Java Api-删除索引

    删除可以是删除整个索引库,也可以根据文档id删除索引库下的文档,还可以通过query查询条件删除所有符合条件的数据. 一.删除整个索引库 下面的例子会删除indexName索引: DeleteInde ...

  10. Elasticsearch Java API深入详解

    0.题记 之前Elasticsearch的应用比较多,但大多集中在关系型.非关系型数据库与Elasticsearch之间的同步.以上内容完成了Elasticsearch所需要的基础数据量的供给.但想要 ...

随机推荐

  1. HashSet的自定义实现

    package com.cy.collection; import java.util.HashMap; /** * HashSet自定义实现 * 是使用hashMap实现的 * 可以看一下HashS ...

  2. flume-拦截器、channel选择器、sink组合sink处理器

    1. Flume Interceptors Flume有能力修改/删除流程中的events.这是在拦截器(interceptor)的帮助下完成的.拦截器(Interceptors)是实现org.apa ...

  3. PHP——抽象类与接口的区别

    在学习PHP面向对象时,都会在抽象类与接口上迷惑,作用差不多为什么还那么容易混淆,何不留一去一?但是事实上两者的区别还是很大的,如果能够很好地运用PHP的两个方法,面向对象的程序设计将会更加合理.清晰 ...

  4. [UE4]根据名字调用函数(蓝图)

    一.Set Timer by Function Name 二.Set Timer by Event

  5. centos7开启端口(永久--permanent)

    1.运行命令:firewall-cmd --get-active-zones运行完成之后,可以看到zone名称,如下: 2.执行如下命令命令: firewall-cmd --zone=public - ...

  6. Java基础知识_毕向东_Java基础视频教程笔记(22-25 GUI 网络编程 正则)

    22天-01-GUIGUI:Graphical User Interface 图形用户接口 Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中CLI:Common lin ...

  7. 获取SQL数据库表空间结构

    if exists(select 1 from tempdb..sysobjects where id=object_id('tempdb..#tabName') and xtype='u')drop ...

  8. java读取按行txt文件

    import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; pub ...

  9. JS弹框

    <script type="text/javascript"> function show_alert() { alert('警报'); } function show ...

  10. php引用变量

    引用变量:在php中引用意味着用不同的名字访问同一个变量内容 定义方式:& 总结:$b=&$a其中$b是取到了$a的地址,随着$a的地址变化,不会重新开辟空间可以根据他们的内存占用情况 ...