2019独角兽企业重金招聘Python工程师标准>>>

前言:elasticsearch虽然自带rest接口,但是在真正使用过程中可能更多的是通过不同编程语言的客户端进行交互。

因为代码里有或多或少的注释,所以直接贴代码:

package elasticsearcha;import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import entity.User;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.get.MultiGetItemResponse;
import org.elasticsearch.action.get.MultiGetResponse;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.MultiSearchResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.junit.Test;
import java.net.InetAddress;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;/*** Created by wangnian on 2016/5/29.*/
public class EsTest {Client client = getClient("192.168.1.55");//创建客户端public Client getClient(String host) {try {Client client = TransportClient.builder().build().addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host), 9300));return client;} catch (Exception ex) {System.out.println(ex);}return null;}/*** 将对象通过jackson.databind转换成byte[]* 注意一下date类型需要格式化处理  默认是 时间戳** @return*/public byte[] convertByteArray(Object obj) {ObjectMapper mapper = new ObjectMapper(); // create once, reusetry {byte[] json = mapper.writeValueAsBytes(obj);return json;} catch (JsonProcessingException e) {e.printStackTrace();}return null;}/*** 将对象通过JSONtoString转换成JSON字符串* 使用fastjson 格式化注解  在属性上加入 @JSONField(format="yyyy-MM-dd HH:mm:ss")** @return*/public String jsonStr(Object obj) {return JSON.toJSONString(obj);}/*** 增删改查** @throws Exception*/@Testpublic void test() throws Exception {Map<String, Object> json = new HashMap<String, Object>();json.put("name", "wangnian11");json.put("postDate", new Date());json.put("message", "trying out Elasticsearch");User user = new User();user.setId(2);user.setName("更新第一条");user.setPostDate(new Date());user.setMessage("这是一个测试的数据");IndexResponse response = client.prepareIndex("index", "user", user.getId().toString())//参数说明: 索引,类型 ,_id.setSource(jsonStr(user))//setSource可以传以上map string  byte[] 几种方式.get();boolean created = response.isCreated();System.out.println("创建一条记录:" + created);//删除_id为1的类型DeleteResponse response2 = client.prepareDelete("index", "user", "2").get();System.out.println("删除一条数据:" + response2.isFound());//更新UpdateResponse updateResponse = client.prepareUpdate("index", "user", "1").setDoc(jsonBuilder().startObject().field("name", "王念").endObject()).get();System.out.println("更新一条数据:" + updateResponse.isCreated());//获取_id为1的类型GetResponse response1 = client.prepareGet("index", "user", "1").get();response1.getSourceAsMap();//获取值转换成mapSystem.out.println("查询一条数据:" + JSON.toJSON(response1.getSourceAsMap()));}@Testpublic void test2() {//查询多个id的值MultiGetResponse multiGetItemResponses = client.prepareMultiGet().add("index", "user", "1").add("index", "user", "2", "3", "4").get();for (MultiGetItemResponse itemResponse : multiGetItemResponses) {GetResponse response = itemResponse.getResponse();if (response.isExists()) {String json = response.getSourceAsString();System.out.println(json);}}//搜索SearchResponse response = client.prepareSearch("index")//可以同时搜索多个索引prepareSearch("index","index2").setTypes("user")//可以同时搜索多个类型.setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setQuery(QueryBuilders.termQuery("name", "张三"))                 // Query.setPostFilter(QueryBuilders.rangeQuery("age").from(12).to(18))     // Filter.setFrom(0).setSize(2).setExplain(true).execute().actionGet();forSearchResponse(response);System.out.println("总共查询到有:" + response.getHits().getTotalHits());//多查询结果SearchRequestBuilder srb1 = client.prepareSearch().setQuery(QueryBuilders.queryStringQuery("张三")).setSize(1);SearchRequestBuilder srb2 = client.prepareSearch().setQuery(QueryBuilders.matchQuery("name", "张三")).setSize(1);MultiSearchResponse sr = client.prepareMultiSearch().add(srb1).add(srb2).execute().actionGet();long nbHits = 0;for (MultiSearchResponse.Item item : sr.getResponses()) {SearchResponse response1 = item.getResponse();forSearchResponse(response1);nbHits += response1.getHits().getTotalHits();}System.out.println("多查询总共查询到有:" + nbHits);}public void forSearchResponse(SearchResponse response) {for (SearchHit hit1 : response.getHits()) {Map<String, Object> source1 = hit1.getSource();if (!source1.isEmpty()) {for (Iterator<Map.Entry<String, Object>> it = source1.entrySet().iterator(); it.hasNext(); ) {Map.Entry<String, Object> entry = it.next();System.out.println(entry.getKey() + "=======" + entry.getValue());}}}}
}

博客地址:http://my.oschina.net/wangnian

转载于:https://my.oschina.net/wangnian/blog/684686

elasticsearch2.2之javaApi相关推荐

  1. ElasticSearch-2.0.0集群安装配置与API使用实践

    ElasticSearch是基于全文搜索引擎库Lucene构建的分布式搜索引擎,我们可以直接使用ElasticSearch实现分布式搜索系统的搭建与使用,都知道,Lucene只是一个搜索框架,它提供了 ...

  2. 2021年大数据HBase(五):HBase的相关操作JavaAPI方式

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 HBase的相关操作-JavaAPI方式 一.需求说明 ...

  3. Elasticsearch2.2.0配置文件说明

    为什么80%的码农都做不了架构师?>>>    官方配置文档 https://www.elastic.co/guide/en/elasticsearch/reference/curr ...

  4. Elasticsearch的javaAPI之query dsl-queries

    Elasticsearch的javaAPI之query dsl-queries 和rest query dsl一样,elasticsearch提供了一个完整的Java query dsl. 查询建造者 ...

  5. ElasticSearch2.4.6的安装部署以及集群部署、ElasticSearch-head等插件的安装

    2019独角兽企业重金招聘Python工程师标准>>> 一.安装 在安装之前,请先设置jdk环境,到oracle官网下载相应的jdk版本,我这边使用的是jdk1.7的版本 vim / ...

  6. 三、hbase JavaAPI

    hbase是Java编写的,当然也提供了Java的API来操作hbase. 如果你是使用虚拟机来安装配置hbase那么你需要配置一下hostname,不然JavaAPI访问虚拟机的时候会无法连接,请参 ...

  7. ElasticSearch2.2.0安装

    一.ElasticSearch2.2.0安装 1.下载ElasticSearch2.2.0安装包  https://download.elastic.co/elasticsearch/elastics ...

  8. hbase 单机 java api,HBase学习(一)hbase安装(单机模式)和javaapi客户端访问hbase例子...

    平时习惯了window下开发,而Hbase只能在linux环境下运行,所以决定把hbase安装一台虚拟机上,在windows下运行eclipse连接虚拟机里的hbase 因为对linux命令了解不多, ...

  9. 【全文搜索引擎】Elasticsearch基本查询基础JavaAPI

    操作索引 ElasticSearch存储数据的地方,可以理解成关系型数据库中的数据库概念. 添加索引 PUT http://ip:端口/索引名称Kibana操作 --- PUT 索引名称 查询索引 G ...

最新文章

  1. 值得研究的 开源图形引擎
  2. vim折叠的使用方法
  3. 南理工计算机学院研究生课程的评价和反思(研一上)
  4. 前端开发的难点到底在什么地方?
  5. 全球首款5G手机出炉?其实只是一个笑话
  6. 使用ADD命令将目录复制到Docker的其他目录
  7. POJ--3278 Catch That Cow
  8. 系统开发中的时间类型的处理问题
  9. 【Java】用类描述计算机中CPU的速度和硬盘的容量,要求Java应用程序由4个类,名字分别是PC、CPU、HardDisk、和Test,其中Test是主类。
  10. R 聚类热图-数据的标准化
  11. 数学在计算机科学上的应用文献,计算机科学技术在数学中应用浅析
  12. Flutter安装时你一定会碰到的问题
  13. dismiss和remove_Dialog的dismiss和cancel 区别 (转)
  14. “万年老大难” - 沟通与协调
  15. 【XSY2495】余数
  16. vue.js bootstrap 下拉列表_Excel下拉菜单制作的小技巧
  17. 叮,一份详细的LIN收发器选型指南请查收
  18. 服务器中调试微信支付免预充,微信支付-统一支付接口被坑经历
  19. 超酷!!!成功使用doxygen+Graphviz+HtmlHelp 自动生成函数调用关系图
  20. Kali使用指南————安装中文输入法

热门文章

  1. 自学编程需要注意什么?
  2. centos7安装Cloudera Manager
  3. 如何用Markdown轻松排版知乎专栏文章?
  4. 政策推动加速5G发展 全球统一标准成大势所趋
  5. Android性能优化典范(转)
  6. nodejs安装express框架
  7. linux进程通讯-纯文本文件
  8. 数据可视化----我在寻找一款类似vfp或是access这样自带可视化风格的数据库或是键盘数据库...
  9. 软件开发了10年,迷茫了
  10. office 2007图标_微软Office 365桌面版新图标开始测试