转载请标明出处:http://donlianli.iteye.com/blog/1902238
ElasticSearch(名称太长,后面简称ES)作为一个搜索引擎,目前可谓是如日中天,几乎和solr齐驾并驱。关于他能做什么,跟云计算有什么关系,在此不再描述。但是ES的官方文档,特别是关于java的客户端文档,真是少的可怜,甚至连个完整的增删改的示例都没有。在此,我就献丑了。
在开始讲解之前,还是先做个铺垫,为了能够有一个可以索引的模型,我们自定义了一个模型,暂时起个名称叫LogModel吧,这个模型有各种数据类型,int,long,String,list,但千万不要认为这是跟记录日志有关的一个模型。作为索引的一个最简单模型。代码如下:
import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.UUID; /** * 瞎编的一个模型,跟日志基本没有关系 * @author donlian */ public class LogModel { //主ID private long id; //次ID private int subId; /** * 系统名称 */ private String systemName; private String host; //日志描述 private String desc; private List<Integer> catIds; public LogModel(){ Random random = new Random(); this.id = Math.abs(random.nextLong()); int subId = Math.abs(random.nextInt()); this.subId = subId; List<Integer> list = new ArrayList<Integer>(5); for(int i=0;i<5;i++){ list.add(Math.abs(random.nextInt())); } this.catIds = list; this.systemName = subId%1 == 0?"oa":"cms"; this.host = subId%1 == 0?"10.0.0.1":"10.2.0.1"; this.desc = "中文" + UUID.randomUUID().toString(); } public LogModel(long id,int subId,String sysName,String host,String desc,List<Integer> catIds){ this.id = id; this.subId = subId; this.systemName = sysName; this.host = host; this.desc = desc; this.catIds = catIds; } ...//省去get,set方法 }
同时,因为ES在索引的时候,一般都用json格式,因此,使用jackson定义了一个将对象转化成json的工具类,也很简单,代码:
public class ESUtils { private static ObjectMapper objectMapper = new ObjectMapper(); public static String toJson(Object o){ try { return objectMapper.writeValueAsString(o); } catch (JsonProcessingException e) { e.printStackTrace(); } return ""; } }
在开始进行操作ES服务器之前,我们必须得获得ES的API,简单介绍一下ES操作服务器的两种方式,一种是使用Node方式,即本机也启动一个ES,然后跟服务器的ES进行通信,这个node甚至还能存储(奇怪,一般需要这样的方式吗?),另一种,就是下面我介绍的这一种,通过一个对象使用http协议跟服务器进行交互。
获得一个ES客户端API的代码如下:
Settings settings = ImmutableSettings.settingsBuilder() //指定集群名称 .put("cluster.name", "elasticsearch") //探测集群中机器状态 .put("client.transport.sniff", true).build(); /* * 创建客户端,所有的操作都由客户端开始,这个就好像是JDBC的Connection对象 * 用完记得要关闭 */ Client client = new TransportClient(settings) .addTransportAddress(new InetSocketTransportAddress("192.168.1.106", 9300));
Client对象,可以理解为数据库的Connection对象。好了,准备工作完成,下面就开始增删改查。
Index(增加)
ES里面的增加对象不叫什么add,save等,叫index。但无论叫什么名称,反正就是向ES服务器里面加数据。上面说过一个对象转json的工具类,其实ES的API中,是自带构建json的工具类的。
import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.client.Client; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import com.donlianli.es.ESUtils; import com.donlianli.es.model.LogModel; /** * 向ES添加索引对象 * @author donlian */ public class IndexTest { public static void main(String[] argv){ Settings settings = ImmutableSettings.settingsBuilder() //指定集群名称 .put("cluster.name", "elasticsearch") //探测集群中机器状态 .put("client.transport.sniff", true).build(); /* * 创建客户端,所有的操作都由客户端开始,这个就好像是JDBC的Connection对象 * 用完记得要关闭 */ Client client = new TransportClient(settings) .addTransportAddress(new InetSocketTransportAddress("192.168.1.106", 9300)); String json = ESUtils.toJson(new LogModel()); //在这里创建我们要索引的对象 IndexResponse response = client.prepareIndex("twitter", "tweet") //必须为对象单独指定ID .setId("1") .setSource(json) .execute() .actionGet(); //多次index这个版本号会变 System.out.println("response.version():"+response.version()); client.close(); } }
运行这个代码,就向ES插入了一条数据,你运行两遍,还是一条。ES根据你设置的ID来设置对象,如果没有则插入,有则更新。每更新一次,对应的version加1.
好了,在次,使用以下命令,应该能够查询到一条记录了。
curl -XGET 'http://localhost:9200/twitter/tweet/1'
delete(删除)
有了增加的例子,删除的例子也就好写了。增加是prepareIndex,删除是prepareDelete,查询就是PrepareGet。
代码如下:
import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.client.Client; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import com.donlianli.es.ESUtils; public class DeleteTest { public static void main(String[] argv){ Settings settings = ImmutableSettings.settingsBuilder() //指定集群名称 .put("cluster.name", "elasticsearch") //探测集群中机器状态 .put("client.transport.sniff", true).build(); /* * 创建客户端,所有的操作都由客户端开始,这个就好像是JDBC的Connection对象 * 用完记得要关闭 */ Client client = new TransportClient(settings) .addTransportAddress(new InetSocketTransportAddress("192.168.1.106", 9300)); //在这里创建我们要索引的对象 DeleteResponse response = client.prepareDelete("twitter", "tweet", "1") .execute().actionGet(); System.out.println(response.getId()); System.out.println(ESUtils.toJson(response.getHeaders())); } }
GET(查询)
import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.client.Client; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; public class GetTest { public static void main(String[] argv){ Settings settings = ImmutableSettings.settingsBuilder() //指定集群名称 .put("cluster.name", "elasticsearch") //探测集群中机器状态 .put("client.transport.sniff", true).build(); /* * 创建客户端,所有的操作都由客户端开始,这个就好像是JDBC的Connection对象 * 用完记得要关闭 */ Client client = new TransportClient(settings) .addTransportAddress(new InetSocketTransportAddress("192.168.1.106", 9300)); //在这里创建我们要索引的对象 GetResponse response = client.prepareGet("twitter", "tweet", "1") .execute().actionGet(); System.out.println("response.getId():"+response.getId()); System.out.println("response.getSourceAsString():"+response.getSourceAsString()); } }
好了,增删改查的代码写完。至于搜索,那是一个比较深入的话题,我也在慢慢探索。我时间我会继续写下去。
更多有关elasticsearch的内容,请浏览专栏:http://www.iteye.com/blogs/subjects/elasticsearch-tutor
相关推荐
elasticsearch5.5.0 的增删改查java api操作 支持新建mapping 根据实体类的注解方式生成 支持ik分词 支持新建index 根据实体类注解 支持删除index 增删改查操作都很详细 网上的版本大多数都是2.x的 最新的和旧的...
Elasticsearch 基础语法 增删改查聚合 配置结构化数据 postman,下载后直接导入 postman 即可
关于 java 操作 的elasticsearch 7.x 的增删改查,下载即用,封装好的连接,查询哦,具体使用查看test 包下的方法即可
结合实际项目,使用ElasticSearch restful接口实现对ES的增删改查以及聚合查询
关于elasticsearch5.3.0基础增删改查 开源共享 方便他人 赠人玫瑰 手有余香
原elasticsearch sql(不是官方收费版)只支持select查询查找,现已完善支持增删改查功能且支持mybatis集成
本人花了几天时间学习es技术,共享给大家,本工程源码,对es文档shierwin/_doc问题库表进行数据的增删改查操作,字段是qustion,anwser,id自动生成;环境es6.8.6,jkd1.8!es官网规定jdk必须1.8.211以上版本!
Java做客户端对Elasticsearch服务的增删改查及批量修改操作,代码简洁易懂,思路清晰有注释.详情参考https://blog.csdn.net/linhaiyun_ytdx/article/category/7042758
spring boot2 实现elasticsearch 增删改查实例。elasticsearch-rest-high-level-client, 启动类启动 启动成功后:http://localhost:8080/els/search?mess=78787
elasticsearch 增删改查,简单实现基于Apache lucene构建的开源搜索引擎。(直接基于Luence开发很复杂) Java写的,提供Restful API。 屏蔽复杂性,使全文搜索更简单。 可轻松横向扩展,支持PB级结构化和非结构化...
spring-boot-starter-data-elasticsearch 2.5.7 与 elasticsearch 7.10.x 的使用用法
Elasticsearch的JAVA操作工具类,包括增删改查的封装,Elasticsearch的JAVA操作工具类,包括增删改查的封装
springboot 整合 elasticsearch demo(内含增删改查)以及基本es操作 效果图在这里 :https://blog.csdn.net/Japhet_jiu/article/details/105581997
实现增删改查,同步mysql数据库,设置mapping 使用有问题可以联系我. 如果不使用maven 可以找我要jar包,使用过程中发现问题请大家指教. 所有的连接连接方式,数据库的连接方式,索引名称和类型全部写在EsAll.class中 各...
JDK环境为1.8,JEST5.0以上,ES6.0以上 我搭建的非maven项目,亲测增删改查没问题。
001 - 开篇.mp4 002 - 技术选型.mp4 003 - 教学大纲.mp4 008 - 入门 - HTTP - 索引 - 创建.mp4 009 - 入门 - HTTP - 索引 - 查询 & 删除.mp4 010 - 入门 - HTTP - 文档 - 创建 (Put & ...025 - 入门 - JavaAPI - 文档
赠送jar包:elasticsearch-x-content-6.3.0.jar; 赠送原API文档:elasticsearch-x-content-6.3.0-javadoc.jar; 赠送源代码:elasticsearch-x-content-6.3.0-sources.jar; 赠送Maven依赖信息文件:elasticsearch-x...
umi+react+antd 增删改查
赠送jar包:elasticsearch-rest-high-level-client-6.8.3.jar; 赠送原API文档:elasticsearch-rest-high-level-client-6.8.3-javadoc.jar; 赠送源代码:elasticsearch-rest-high-level-client-6.8.3-sources.jar;...
赠送jar包:elasticsearch-rest-client-6.8.3.jar; 赠送原API文档:elasticsearch-rest-client-6.8.3-javadoc.jar; 赠送源代码:elasticsearch-rest-client-6.8.3-sources.jar; 赠送Maven依赖信息文件:elastic...