上篇文章散仙介绍了ElasticSearch的入门安装和使用,那么本篇我们来看下,如何使用java api来和ElasticSearch进行交互,简单点说,就是实现一个增删改查,来找找入门的感觉。

在这里散仙解释一下,为啥选择使用Java api来作为一个入门的例子,主要原因如下: 
(1)Java在大中小型企业级应用非常广泛,而且ES本身就是包装了使用java编写的Apache Lucene。 
(2)基于java的api能和其他很多基于hadoop生态系统的开源框架对接,如Hbase,Hive,Pig等。 
(3)学习资料比较丰富,降低了入门门槛。 

当然散仙在这里并不是来夸赞JAVA如何牛逼,而是以一个方便于大家快速学习和入门着想的,ES的最大特点就是提供了一个轻量级的RESTful的接口来对接各种编程语言,你可以使用python,php,JavaScript,ruby,C#等等任何语言来对ES进行操作和管理,甚至你也可以使用shell+curl来搞定这件事情。 

本篇,散仙给出一个最简单的使用java api操作ES的小例子,后面文章,散仙会继续分享关于ES更多的文章,在这之前,还是想请大家注意ES的服务在启动之后,会提供2个端口来供外部使用,一个是9300基于给java程序使用的端口,另一个是9200供其他编程语言调用,以及等一些插件的访问也会使用此端口,在编写程序时,切记不能写错。 

  1. package com.test;
  2. import java.util.Date;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import java.util.Map.Entry;
  6. import org.elasticsearch.action.delete.DeleteResponse;
  7. import org.elasticsearch.action.get.GetResponse;
  8. import org.elasticsearch.action.index.IndexResponse;
  9. import org.elasticsearch.action.update.UpdateRequest;
  10. import org.elasticsearch.client.Client;
  11. import org.elasticsearch.client.transport.TransportClient;
  12. import org.elasticsearch.common.transport.InetSocketTransportAddress;
  13. import org.elasticsearch.index.get.GetField;
  14. import com.google.gson.Gson;
  15. /**
  16. * 使用java api 操作elasticsearch索引,包含了基本的增删改查
  17. * @author qindongliang
  18. * 欢迎大家加入下面的技术交流群(广告勿入),一起探讨交流,
  19. * 另外也可关注我们的公众号:我是攻城师(woshigcs)
  20. * 搜索技术交流群:324714439
  21. * 大数据技术交流群:376932160
  22. * **/
  23. public class ESCommon {
  24. //es的客户端实例
  25. Client client=null;
  26. {
  27. //连接单台机器,注意ip和端口号,不能写错
  28. client=new TransportClient().
  29. addTransportAddress(new InetSocketTransportAddress("192.168.46.23", 9300));
  30. }
  31. public static void main(String[] args)throws Exception {
  32. ESCommon es=new ESCommon();
  33. //es.updatedoc();
  34. //es.getone();
  35. //es.deleteOne();
  36. es.indexOne();
  37. }
  38. /**
  39. * delete one data
  40. *
  41. * **/
  42. public void deleteOne(){
  43. try{
  44. DeleteResponse de=client.prepareDelete("database", "table", "2").execute().actionGet();
  45. if(!de.isFound()){
  46. System.out.println("词条数据不存在!");
  47. }
  48. System.out.println("删除成功!");
  49. }catch(Exception e){
  50. e.printStackTrace();
  51. }
  52. }
  53. /**
  54. * index one data
  55. * **/
  56. public void updatedoc()throws Exception{
  57. UpdateRequest ur=new UpdateRequest();
  58. ur.index("database");
  59. ur.type("table");
  60. ur.id("1");
  61. Map<String, Object> data = new HashMap<String, Object>();
  62. data.put("user","更新的用户");
  63. data.put("message","我也要更新了呀");
  64. ur.doc(data);
  65. client.update(ur);
  66. System.out.println("更新成功!");
  67. }
  68. /**
  69. * get one data
  70. * **/
  71. public void getone()throws Exception{
  72. GetResponse response = client.prepareGet("database", "table", "22")
  73. .execute()
  74. .actionGet();
  75. if(!response.isExists()){
  76. System.out.println("数据不存在! ");
  77. return;
  78. }
  79. Map<String, Object> source = response.getSource();
  80. for(Entry<String, Object> eo:source.entrySet()){
  81. System.out.println(eo.getKey()+"  "+eo.getValue());
  82. }
  83. Map<String, GetField> fields = response.getFields();
  84. if(fields!=null){
  85. for(Entry<String, GetField> s:fields.entrySet()){
  86. System.out.println(s.getKey());
  87. }
  88. }else{
  89. System.out.println("fields is null;");
  90. }
  91. client.close();
  92. }
  93. /**
  94. * index one data
  95. *
  96. * **/
  97. public void indexOne()throws Exception{
  98. Map<String, Object> data = new HashMap<String, Object>();
  99. data.put("user","kimchy");
  100. data.put("postDate",new Date());
  101. data.put("message","trying out Elasticsearch");
  102. Gson g=new Gson();
  103. String json=g.toJson(data);
  104. //得到一个json串
  105. IndexResponse ir=client.prepareIndex("database", "table", "23").setSource(json).execute().actionGet()               ;
  106. String index_name=ir.getIndex();
  107. String index_type=ir.getType();
  108. String docid=ir.getId();
  109. long version=ir.getVersion();
  110. System.out.println("索引名: "+index_name+"  ");
  111. System.out.println("索引类型: "+index_type+"  ");
  112. System.out.println("docid: "+docid+"  ");
  113. System.out.println("版本号: "+version+"  ");
  114. client.close();
  115. System.out.println("连接成功!");
  116. }
  117. }


好了,本篇入门小例子,就到此结束了 
想了解更多有关电商互联网公司的搜索技术和大数据技术的使用,请欢迎扫码关注微信公众号:我是攻城师(woshigcs) 
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!


ElasticSearch入门之花落红尘(三)的更多相关文章

  1. ElasticSearch入门 第三篇:索引

    这是ElasticSearch 2.4 版本系列的第三篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  2. Elasticsearch入门教程(三):Elasticsearch索引&映射

    原文:Elasticsearch入门教程(三):Elasticsearch索引&映射 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文 ...

  3. ElasticSearch入门-搜索如此简单

    搜索引擎我也不是很熟悉,但是数据库还是比较了解.可以把搜索理解为数据库的like功能的替代品.因为like有以下几点不足: 第一.like的效率不行,在使用like时,一般都用不到索引,除非使用前缀匹 ...

  4. 《读书报告 -- Elasticsearch入门 》--简单使用(2)

    <读书报告 – Elasticsearch入门 > ' 第四章 分布式文件存储 这章的主要内容是理解数据如何在分布式系统中存储. 4.1 路由文档到分片 创建一个新文档时,它是如何确定应该 ...

  5. 《读书报告 -- Elasticsearch入门 》-- 安装以及简单使用(1)

    <读书报告 – Elasticsearch入门 > 第一章 Elasticsearch入门 Elasticsearch是一个实时的分布式搜索和分析引擎,使得人们可以在一定规模上和一定速度上 ...

  6. ElasticSearch入门 附.Net Core例子

    1.什么是ElasticSearch? Elasticsearch是基于Lucene的搜索引擎.它提供了一个分布式,支持多租户的全文搜索引擎,它具有HTTP Web界面和无模式JSON文档. Elas ...

  7. ElasticSearch入门点滴

    这是Elasticsearch-6.2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 ...

  8. ElasticSearch入门 第二篇:集群配置

    这是ElasticSearch 2.4 版本系列的第二篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

  9. ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套

    这是ElasticSearch 2.4 版本系列的第六篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...

随机推荐

  1. C#让两个长度相同的数组一一对应

    比如: string a[]={"x","y","z"} "} 用字典使其一一对应 Dictionary<string, s ...

  2. javascript 的学习笔记(第一天)

    1.==与=== ==   先转换类型,再比较 ===  直接比较 2.parseInt  把字符串转成整数 parsefloat  把字符串转成小数 3. 变量的作用域:变量起作用的范围 局部变量: ...

  3. leetcood学习笔记-45-跳跃游戏二

    题目描述: 第一次提交;超时 class Solution: def jump(self, nums: List[int]) -> int: l = [] for i in range(len( ...

  4. Windows taskkill

    TASKKILL [/S system [/U username [/P [password]]]]         { [/FI filter] [/PID processid | /IM imag ...

  5. 阿里云宣布进入 Serverless 容器时代,推出弹性容器实例服务 ECI

    摘要: 阿里云宣布弹性容器实例 ECI(Elastic Container Instance)正式商业化. 为了应对业务高峰,打算提前多久执行ECS扩展?买了ECS虚拟机,容器规格不能完美装箱怎么办? ...

  6. C++——运算符重载

    运算符重载编程基础 例如: //全局函数 完成 +操作符 重载  Complex operator+(Complex &c1, Complex &c2) //类成员函数 完成 -操作符 ...

  7. LUOGU P4042 [AHOI2014/JSOI2014]骑士游戏 (spfa+dp)

    传送门 解题思路 首先设\(f[x]\)表示消灭\(x\)的最小花费,那么转移方程就是 \(f[x]=min(f[x],\sum f[son[x]] +s[x])\),如果这个转移是一个有向无环图,那 ...

  8. 19.SimLogin_case08

    # 模拟登录微博 import time import base64 import rsa import binascii import requests import re import rando ...

  9. MVC中利用ViewBag传递Json数据时的前端处理方法

    用viewBag传递Json字符串到前端时,json字符串中的“会被转义为& quot,前端处理方法为@Html.Raw(Json.Encode(ViewBag.Data)),再用eval() ...

  10. CSS之Important

    1.important只能用于直接选中,不能用于间接选中 2.通配符选择器选中的标签也是直接选中的 3.!important只能提升被指定的属性的优先级 ,其他属性的优先级不会被提升 4.!impor ...