上篇文章散仙介绍了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. 在Linux(centos)下,安装Apache和PHP环境

    1001  ll /opt/lampp/modules/ 1002  history | grep httpd 1003  vim /etc/httpd/conf/httpd.conf 1004  v ...

  2. JS事件 什么是事件?JavaScript 创建动态页面。事件是可以被 JavaScript 侦测到的行为。 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件。

    什么是事件 JavaScript 创建动态页面.事件是可以被 JavaScript 侦测到的行为. 网页中的每个元素都可以产生某些可以触发 JavaScript 函数或程序的事件. 比如说,当用户单击 ...

  3. thinkphp 获取内容

    如果需要获取渲染模板的输出内容而不是直接输出,可以使用fetch方法. fetch方法的用法和display基本一致(只是不需要指定输出编码和输出类型): 大理石平台规格 fetch('模板文件') ...

  4. PHP MVC运用

    php中的MVC模式运用 首先我来举个例子: 一个简单的文章显示系统 简单期间,我们假定这个文章系统是只读的,也就是说这个例子将不涉及文章的发布,现在开始了. 由于只涉及数据库的读取,所以我定义了两个 ...

  5. IK分词器插件

    (1)源码 https://github.com/medcl/elasticsearch-analysis-ik  (2)releases https://github.com/medcl/elast ...

  6. <scrapy爬虫>基本操作

    scrapy选择器的用法 //selector可以加可以不加 response.selector.xpath("//title/text()").extract_first() r ...

  7. shell脚本练习05

    ######################################################################### # File Name: -.sh # Author ...

  8. linux流量监控iftop命令安装详解

    iftop跟nload差不多,也是捕获网卡流量的命令,nload的安装见之前发布的教程:http://www.cnblogs.com/catlee/p/5703541.html 开始安装.本文以cen ...

  9. QVaraint类

    一.QVaraint简介     QVaraint类作为一个包含了大多数Qt普通类型的的联合体类.因为c++联合体没有构造函数和析构函数的,许多继承的Qt类不能够在联合体当中使用.(联合体当中的变量共 ...

  10. Java怎样对一个属性设置set或get方法的快捷键

    具体步骤如下: 首页,在testApp.java 类中定义属性,例如:public Sting name; 其次,Alt+Shift+S,  选择Generate Getters and Setter ...