elasticsearch2.2之javaApi

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

前言: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294031.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

My SQL 学习笔记二

本文主要记录这两天遇到的问题&#xff1a; 1.sql脚本文件存在自己的目录下&#xff0c;例如在F盘&#xff0c;通过命令&#xff1a;mysql> source F:/filename.sql 会弹出Failed to open file "F:/filename.sql" error:2 错误 这个错误一般是Mysql没有权限访问文…

《程序员的职业素养》读书笔记

书籍地址&#xff1a;http://book.douban.com/subject/11614538/ 一句话点评该书&#xff1a;Bob大叔的职业生涯经验总结&#xff0c;现身说法&#xff0c;可信可敬&#xff01; &#xff08;一&#xff09;专业主义 &#xff08;1&#xff09;“专业主义”就意味着担当责…

html 转义反斜杠字符串,JS中处理单个反斜杠(即转义字符的处理)

问题来源&#xff1a;在表单的标签中对输入的字符串进行大写转换。一不小心输入了反斜杠 \如下图所示&#xff1a;输入 chn\ 的时候&#xff0c;在 IE8 下弹出一个js错误。(在实际的项目的表单元素中遇到了&#xff0c;单独这样拿出来测试的时候又不弹出错误。也很是焦灼)索…

Android之SurfaceView简介(一)

1. SurfaceView介绍 通常情况程序的View和用户响应都是在同一个线程中处理的&#xff0c;这也是为什么处理长时间事件&#xff08;例如访问网络&#xff09;需要放到另外的线程中去&#xff08;防止阻塞当前UI线程的操作和绘制&#xff09;。但是在其他线程中却不能修改UI元素&…

C# 值得永久收藏的WPF项目实战(经典)

01—简介之前也写过好多篇CM框架相关的项目实战文章&#xff0c;比如&#xff1a;C# WPF框架Caliburn.Micro快速搭建C# WPF框架Caliburn.Micro入门实例1C# WPF MVVM项目实战(进阶①)C# WPF MVVM项目实战(进阶②)C# WPF MVVM模式下在主窗体显示子窗体并获取结果C# WPF Caliburn.…

InfoQ十周年:不忘初心,继续前行

我们都知道&#xff1a;软件正在改变世界&#xff0c;也已经看到了在加快这种变化时&#xff0c;于软件世界中我们的影响力。在这种热情下&#xff0c;10年前我们带着一些不寻常的信念与情怀创建了InfoQ&#xff1a;\\\\t我们相信&#xff1a;这个社区需要的内容是开发者所撰写…

eclipse_中的注释_快捷键

eclipse 中的注释 快捷键 把要注释的代码选中&#xff0c;按CtrlShift/ /* */ 形式的 ctrl/ //形式的 取消代码注释&#xff1a; 把要注释的代码选中&#xff0c;按CtrlShift\ /* */ 形式的 ctrl/ //形式的 (1)CtrlSpace 说明:内容助理。提供对方法,变量,参数,j…

html自动填充高度,html元素如何仅使用css填充剩余屏幕高度的100%?

html元素如何仅使用css填充剩余屏幕高度的100&#xff05;&#xff1f;我有一个标题元素和一个内容元素&#xff1a;#header#content我希望标题具有固定的高度&#xff0c;并且内容可以填满屏幕上可用的所有剩余高度&#xff0c;使用overflow-y: scroll;。这可能没有Javascript…

Android之bitmap压缩的几种方法的解读

转载&#xff1a;http://blog.csdn.net/chzphoenix/article/details/30242315?utm_sourcetuicool&utm_mediumreferral 最近在研究微信的sdk&#xff0c;在缩略图这遇到了一点问题。 微信的缩略图要求是不大于32k&#xff0c;这就需要对我的图片进行压缩。试了几种方法&a…

如何通过 C# kill 指定进程?

咨询区 robr我用代码动态的打开了一个 IE 进程&#xff0c;参考如下代码&#xff1a;static void Main(string[] args){ProcessStartInfo startInfo new ProcessStartInfo("iexplore.exe");startInfo.WindowStyle ProcessWindowStyle.Hidden;startInfo.Arguments …

[转]面向接口编程详解(一)——思想基础

我想&#xff0c;对于各位使用面向对象编程语言的程序员来说&#xff0c;“接口”这个名词一定不陌生&#xff0c;但是不知各位有没有这样的疑惑&#xff1a;接口有什么用途&#xff1f;它和抽象类有什么区别&#xff1f;能不能用抽象类代替接口呢&#xff1f;而且&#xff0c;…

bootstrap模态框

bootsrtap模态框不可叠加使用&#xff0c;点击提交时需要确认&#xff0c;暂时未解决转载于:https://www.cnblogs.com/witchgogogo/p/5550338.html

Oracle 在 多个Virtualbox 虚拟机间 跨不同物理宿主机进行通信

因为单位网络管理的原因&#xff0c;不太方便使用 Virtualbox 的Bridge Adapter 模式&#xff0c;故此欲采用NAT模式&#xff0c;不对外不暴露虚拟机IP。 但是此时会有一个问题&#xff1a;采用NAT模式后&#xff0c;在通常情况下&#xff0c; 从外面看&#xff0c;或者从物理机…

Android之解决在非Activity中使用startActivity

今天遇到一个问题就是&#xff0c;如何在非activity里面使用startActivity(); 解决办法如下、 需要我们有context intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent);

亚马逊 html代码转换,亚马逊七种产品描述常用HTML代码,文字颜色代码让Listing更出彩...

排版风格和排版水平对于亚马逊Listing的运营至关重要。虽说亚马逊以产品为王&#xff0c;但如果消费者打开的是一篇毫无美感的排版&#xff0c;视觉体验不舒服&#xff0c;获取不到吸引他的卖点&#xff0c;转化率将大大降低&#xff01;没使用HTML代码的卖家&#xff0c;产品描…

如何将自定义的 Delegate 转成 Func 委托?

咨询区 AndreyAkinshin场景是这样的&#xff0c;我自定义了一个 SomeDelegate 委托&#xff0c;然后将 Inc 方法灌入到其中&#xff0c;同时我也将 Inc 赋值给了 Func<int,int> 委托&#xff0c;参考代码如下&#xff1a;class Program{static void Main(string[] args){…

java 文件上传至oracle blob字段 实现

2019独角兽企业重金招聘Python工程师标准>>> 指定文件夹下的所有文件上传至oracle的blob字段&#xff0c;java实现 package com.huth;import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.FileInputStream; i…

基于DDD的.NET开发框架 - ABP工作单元(Unit of Work)

返回ABP系列 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。 ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点&#xff0c;它旨在成为一个通用的WEB应用程序框架和项目模板。 ABP的官方网站&#xff1a;http://www.aspnetboilerp…