ElasticSearch入门之花落红尘(三)

上篇文章散仙介绍了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供其他编程语言调用,以及等一些插件的访问也会使用此端口,在编写程序时,切记不能写错。 

Java代码  

  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) 
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!


时间: 2024-12-18 17:45:37

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

Elasticsearch入门教程(三):Elasticsearch索引&amp;映射

原文:Elasticsearch入门教程(三):Elasticsearch索引&映射 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/79213163 索引概念简介 通常说的索引有两种词性,名称和动词. 动词索引indexing,索引一个文档,表示把一个文档存储到索引Index里,可以用来查询和检索,es采用倒排索引 名词索引index,

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

这是ElasticSearch 2.4 版本系列的第六篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 ElasticSearch入门 第三篇:索引 ElasticSearch入门 第四篇:使用C#添加和更新文档 ElasticSearch入门 第五篇:使用C#查询文档 ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套 在ElasticSearch中,使用JSON结构来存储数据,

ElasticSearch入门 第八篇:存储

这是ElasticSearch 2.4 版本系列的第八篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 ElasticSearch入门 第三篇:索引 ElasticSearch入门 第四篇:使用C#添加和更新文档 ElasticSearch入门 第五篇:使用C#查询文档 ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套 ElasticSearch入门 第七篇:分析器 Elasti

ElasticSearch入门 第一篇:Windows下安装ElasticSearch

https://www.elastic.co/downloads/past-releases/elasticsearch-2-4-4 这是ElasticSearch 2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 ElasticSearch入门 第三篇:索引 ElasticSearch入门 第四篇:使用C#添加和更新文档 ElasticSearch入门 第五篇:使用C#查询文档

ElasticSearch入门 附.Net Core例子

1.什么是ElasticSearch? Elasticsearch是基于Lucene的搜索引擎.它提供了一个分布式,支持多租户的全文搜索引擎,它具有HTTP Web界面和无模式JSON文档. Elasticsearch是用Java开发的,根据Apache许可条款作为开源发布. ----来自维基百科的解释 我个人的理解是Elasticsearch(以下简称ES)是一个支持分布式的全文搜索引擎,因为在海量数据搜索时,普通关系型.非关系型数据库因为IO读取.处理器运算能力的限制,导致查询效率难以提升,

Elasticsearch入门教程(一):Elasticsearch及插件安装

原文:Elasticsearch入门教程(一):Elasticsearch及插件安装 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/79194244 分享一个朋友的人工智能教程(请以"右键"->"在新标签页中打开连接"的方式访问).比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. 一:安装Elasti

Elasticsearch入门教程(二):Elasticsearch核心概念

原文:Elasticsearch入门教程(二):Elasticsearch核心概念 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/79200022 基本概念介绍 Elasticsearch是一个基于Lucene构建的开源.分布式.RESTful的搜索引擎,能够实现近实时(NRT)搜索,稳定.可靠.安装方便.Elasticsearch 不

Elasticsearch入门教程(五):Elasticsearch查询(一)

原文:Elasticsearch入门教程(五):Elasticsearch查询(一) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/79228852 // 准备数据 PUT /shop/goods/1 { "name": "2017新款女装冬季外套ulzzang棉袄中长款棉衣韩版百搭棉服面包服", &quo

SaltStack 入门到精通第三篇:Salt-Minion配置文件详解

SaltStack 入门到精通第三篇:Salt-Minion配置文件详解 作者:ArlenJ  发布日期:2014-06-09 17:52:16 ##### 主要配置设置 ##### 配置 默认值 说明 例子 default_include minion.d/*.conf master可以从其他文件读取配置,默认情况下master将自动的将master.d/*.conf中的配置读取出来并应用,其中master.d目录是相对存在于主配置文件所在的目录 default_include: minion