上篇文章散仙介绍了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. Android Button.getWidth()为0的问题

    View在onCreate的时候,没有渲染组件,所以获取到的宽度和高度为0, 需要添加一个观察者,在layout渲染后再去取宽高.代码如下: private Button btn_icon; @Ove ...

  2. 【学术篇】SDOI2009 最优图像

    又是一道辣鸡卡常数题…. luogu上有些题的时限还是有毒的… 最后也只能靠O2过掉了… 不过给我原题当时的2s我随便过给你看嘛, 哪怕评测姬慢50%都没关系的.. 贴一下codevs的截图… 你看最 ...

  3. sql(2) DISTINCT

    SELECT DISTNCT 列名称 FROM 表名称SQL SELECT DISTINCT 语句在表中,可能会包含重复值. 关键词 DISTINCT 用于返回唯一不同的值. 语法:新建数据库 tes ...

  4. [转]SSM(Spring+SpringMVC+Mybatis)框架搭建详细教程【附源代码Demo】

    一.新建项目 运行IDEA,进入初始化界面,然后我们选择新建项目(进入主界面新建项目也是一样的) 在Maven选项卡里面找到对应的java web选项,然后我们点下一步 这一步填入组织等信息,这里比较 ...

  5. csp-s模拟9697题解

    题面:https://www.cnblogs.com/Juve/articles/11790223.html 96: 刚一看以为是水题,直接等差数列求和就好了,然后发现模数不是质数,还要1e18*1e ...

  6. JS调用C++

    1.注册C++函数. //注册回调函数宏 //根据不同需要支持注册两个函数原型,注意CONNECT_JS_CALL_SIMPLE_HANDLER中注册的函数 //需要提前和HTML调用协调好,参数必须 ...

  7. Kmeans算法实现

    下面的demo是根据kmeans算法原理实现的demo,使用到的数据是kmeans.txt 1.658985 4.285136 -3.453687 3.424321 4.838138 -1.15153 ...

  8. hibernate_06_hibernate的延迟加载和抓取策略

    1.延迟加载 1>类级别的延迟加载 指的是通过oad方法查询某个对象的时候,是否采用延迟, session. load(Customer class1L) 类级别延迟加载通过<class& ...

  9. Linux课程---16、apache虚拟主机设置(如何在一台服务器上配置三个域名)

    Linux课程---16.apache虚拟主机设置(如何在一台服务器上配置三个域名) 一.总结 一句话总结:有三个网站www.lampym.com,bbs.lampym.com,mysql.lampy ...

  10. (2)python tkinter-按钮.标签.文本框、输入框

    按钮 无功能按钮 Button的text属性显示按钮上的文本 tkinter.Button(form, text='hello button').pack() 无论怎么变幻窗体大小,永远都在窗体的最上 ...