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供其他编程语言调用,以及等一些插件的访问也会使用此端口,在编写程序时,切记不能写错。
- package com.test;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Map.Entry;
- import org.elasticsearch.action.delete.DeleteResponse;
- import org.elasticsearch.action.get.GetResponse;
- import org.elasticsearch.action.index.IndexResponse;
- import org.elasticsearch.action.update.UpdateRequest;
- import org.elasticsearch.client.Client;
- import org.elasticsearch.client.transport.TransportClient;
- import org.elasticsearch.common.transport.InetSocketTransportAddress;
- import org.elasticsearch.index.get.GetField;
- import com.google.gson.Gson;
- /**
- * 使用java api 操作elasticsearch索引,包含了基本的增删改查
- * @author qindongliang
- * 欢迎大家加入下面的技术交流群(广告勿入),一起探讨交流,
- * 另外也可关注我们的公众号:我是攻城师(woshigcs)
- * 搜索技术交流群:324714439
- * 大数据技术交流群:376932160
- * **/
- public class ESCommon {
- //es的客户端实例
- Client client=null;
- {
- //连接单台机器,注意ip和端口号,不能写错
- client=new TransportClient().
- addTransportAddress(new InetSocketTransportAddress("192.168.46.23", 9300));
- }
- public static void main(String[] args)throws Exception {
- ESCommon es=new ESCommon();
- //es.updatedoc();
- //es.getone();
- //es.deleteOne();
- es.indexOne();
- }
- /**
- * delete one data
- *
- * **/
- public void deleteOne(){
- try{
- DeleteResponse de=client.prepareDelete("database", "table", "2").execute().actionGet();
- if(!de.isFound()){
- System.out.println("词条数据不存在!");
- }
- System.out.println("删除成功!");
- }catch(Exception e){
- e.printStackTrace();
- }
- }
- /**
- * index one data
- * **/
- public void updatedoc()throws Exception{
- UpdateRequest ur=new UpdateRequest();
- ur.index("database");
- ur.type("table");
- ur.id("1");
- Map<String, Object> data = new HashMap<String, Object>();
- data.put("user","更新的用户");
- data.put("message","我也要更新了呀");
- ur.doc(data);
- client.update(ur);
- System.out.println("更新成功!");
- }
- /**
- * get one data
- * **/
- public void getone()throws Exception{
- GetResponse response = client.prepareGet("database", "table", "22")
- .execute()
- .actionGet();
- if(!response.isExists()){
- System.out.println("数据不存在! ");
- return;
- }
- Map<String, Object> source = response.getSource();
- for(Entry<String, Object> eo:source.entrySet()){
- System.out.println(eo.getKey()+" "+eo.getValue());
- }
- Map<String, GetField> fields = response.getFields();
- if(fields!=null){
- for(Entry<String, GetField> s:fields.entrySet()){
- System.out.println(s.getKey());
- }
- }else{
- System.out.println("fields is null;");
- }
- client.close();
- }
- /**
- * index one data
- *
- * **/
- public void indexOne()throws Exception{
- Map<String, Object> data = new HashMap<String, Object>();
- data.put("user","kimchy");
- data.put("postDate",new Date());
- data.put("message","trying out Elasticsearch");
- Gson g=new Gson();
- String json=g.toJson(data);
- //得到一个json串
- IndexResponse ir=client.prepareIndex("database", "table", "23").setSource(json).execute().actionGet() ;
- String index_name=ir.getIndex();
- String index_type=ir.getType();
- String docid=ir.getId();
- long version=ir.getVersion();
- System.out.println("索引名: "+index_name+" ");
- System.out.println("索引类型: "+index_type+" ");
- System.out.println("docid: "+docid+" ");
- System.out.println("版本号: "+version+" ");
- client.close();
- System.out.println("连接成功!");
- }
- }
好了,本篇入门小例子,就到此结束了
想了解更多有关电商互联网公司的搜索技术和大数据技术的使用,请欢迎扫码关注微信公众号:我是攻城师(woshigcs)
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!
ElasticSearch入门之花落红尘(三)的更多相关文章
- ElasticSearch入门 第三篇:索引
这是ElasticSearch 2.4 版本系列的第三篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
- Elasticsearch入门教程(三):Elasticsearch索引&映射
原文:Elasticsearch入门教程(三):Elasticsearch索引&映射 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文 ...
- ElasticSearch入门-搜索如此简单
搜索引擎我也不是很熟悉,但是数据库还是比较了解.可以把搜索理解为数据库的like功能的替代品.因为like有以下几点不足: 第一.like的效率不行,在使用like时,一般都用不到索引,除非使用前缀匹 ...
- 《读书报告 -- Elasticsearch入门 》--简单使用(2)
<读书报告 – Elasticsearch入门 > ' 第四章 分布式文件存储 这章的主要内容是理解数据如何在分布式系统中存储. 4.1 路由文档到分片 创建一个新文档时,它是如何确定应该 ...
- 《读书报告 -- Elasticsearch入门 》-- 安装以及简单使用(1)
<读书报告 – Elasticsearch入门 > 第一章 Elasticsearch入门 Elasticsearch是一个实时的分布式搜索和分析引擎,使得人们可以在一定规模上和一定速度上 ...
- ElasticSearch入门 附.Net Core例子
1.什么是ElasticSearch? Elasticsearch是基于Lucene的搜索引擎.它提供了一个分布式,支持多租户的全文搜索引擎,它具有HTTP Web界面和无模式JSON文档. Elas ...
- ElasticSearch入门点滴
这是Elasticsearch-6.2.4 版本系列的第一篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 ...
- ElasticSearch入门 第二篇:集群配置
这是ElasticSearch 2.4 版本系列的第二篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
- ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套
这是ElasticSearch 2.4 版本系列的第六篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
随机推荐
- error while loading shared libraries: lib*.so: cannot open shared object file: No such file or directory
动态库的搜索路径搜索的先后顺序是: 1.编译目标代码时指定的动态库搜索路径; 2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径: 比如export LD_LIBRARY_PATH=/us ...
- Algo: Majority Element
Approach #1 Brute Force Intuition We can exhaust the search space in quadratic time by checking w ...
- adb命令 logcat日志抓取
一.logcat抓log方法:adb logcat命令,可以加条件过滤 1.安装SDK(参考android sdk环境安装) 2.使用数据线链接手机,在手机助手的sdcard中建立一个1.log的文件 ...
- LeetCode第三题—— Longest Substring Without Repeating Characters(最长无重复子字符串)
题目描述 Given a string, find the length of the longest substring without repeating characters. Example ...
- VMware的使用-永久激活码
1.在软件管理中下载安装VMware 版本为14.0 试用期为30天 2.在网上找的永久破解码 VMware 2018 v14.x 永久许可证激活密钥FF31K-AHZD1-H8ETZ-8WWE ...
- java 数组常见操作
1.遍历 依次访问数组中的每个元素 public class ArrayDemo04 { public static void main(String[] args) { int[] arr = { ...
- Windows netsh
用法: netsh [-a AliasFile] [-c Context] [-r RemoteMachine] [-u [DomainName\]UserName] [-p Password | * ...
- 20170702-变量说明,静态方法,类方法区别,断点调试,fork,yield协程,进程,动态添加属性等。。
概念: 并行:同时运行 并发:看似同时运行 json后任然中文的问题 import json d = {"名字":"初恋这件小事"} new_d1 = jso ...
- csps模拟87888990部分题解
题面:https://www.cnblogs.com/Juve/articles/11752338.html https://www.cnblogs.com/Juve/articles/1175241 ...
- JSON关联属性转换异常
问题:FastJSON在转换对象过程中,该对象还有关联属性,该属性还是一个对象,就出现栈溢出异常,会报一下错误,解决办法:在该属性类的一边加上@JSONField(serialize=false);有 ...