好程序员Java学习路线分享创建Java class

好程序员Java学习路线分享创建Java class,首先通过Transport Client获取ES的连接

private Client client;

//通过Transport Client获取ES的连接

@Before

public void getClient() throws Exception{

????//ES服务的JavaAPI的port为9300

????//注意:如果请求一个ES集群,可以多添几个节点

????//为了避免在一个节点出现网络问题导致的请求失败问题,可以自动切换另外一个节点

????client = TransportClient.builder().build()

????????????.addTransportAddress(new InetSocketTransportAddress(

????????????????????InetAddress.getByName("localhost"),9300));

????????????//.addTransportAddress(...);

}

操作命令

----------------------------------------新建文档------------------------------------

  1. 使用json来创建文档(插入一条数据),自动创建索引和映射

@Test

public void createDocument1(){

????// json格式的数据

????//json "需要转义 -> \

????String source = "{" +

????????????"\"id\":\"1\"," +

????????????"\"title\":\"Lucene是一套用于全文检索和搜寻的开源程式库\"," +

????????????"\"content\":\"Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻\"" +

????????????"}";

????//创建文档, 定义索引名称,文档类型,主键唯一标识ID

????//execute().actionGet() == get() ?代表立刻执行

????IndexResponse indexResponse =

????????????client.prepareIndex("blog", "article", "1")

????????????????????.setSource(source).get(); //加载数据并触发

????this.getResponse(indexResponse); ?//对应下面封装信息

????client.close();

}

将打印信息封装成类,方便this调用

//获取响应信息

private void getResponse(IndexResponse indexResponse) {

????System.out.println("索引名称: " + indexResponse.getIndex());

????System.out.println("文档类型: "+indexResponse.getType());

????System.out.println("ID: "+indexResponse.getId());

????System.out.println("版本: "+indexResponse.getVersion());

????System.out.println("是否创建成功: "+indexResponse.isCreated());

}

  1. 使用map创建文档,自动创建索引和映射

@Test

public void createDocument2(){

????// map类型的数据

????Map<String,Object> source = new HashMap<>();

????source.put("id","2");

????source.put("title","ElasticSearch");

????source.put("content","是一个分布式的 RESTful 风格的搜索和数据分析引擎");

????//创建文档

????IndexResponse indexResponse = client.prepareIndex("blog", "article", "2")

????????????.setSource(source).get();

????this.getResponse(indexResponse);

????client.close();

}

使用ES帮助类(执行类),创建文档
@Test

public void createDocument3() throws Exception{

????XContentBuilder source = XContentFactory.jsonBuilder()

????????????.startObject() //封装数据

????????????????.field("id","3")

????????????????.field("title","ES的核心")

????????????????.field("content","集中的是巴拉巴拉")

????????????.endObject();

????System.out.println(source.toString());

????//创建文档

????IndexResponse indexResponse = client.prepareIndex("blog", "article", "3")

????????????.setSource(source).get();

????this.getResponse(indexResponse);

????client.close();

}

----------------------------------------搜索文档------------------------------------

输出格式为json格式

搜索文档数据 -- 单个索引 ?prepareGet

@Test

public void testGetData1(){

????GetResponse getResponse = client.prepareGet("blog", "article", "1").get();

????System.out.println(getResponse.getSourceAsString());

????client.close(); ??//输出格式为json格式

}

搜索文档数据 -- 多个索引 ?prepareMultiGet

@Test

public void testGetData2(){

????MultiGetResponse multiGetResponse = client.prepareMultiGet()

????????????.add("blog", "article", "1")

????????????.add("blog", "article", "2", "3")

????????????.get();

????for (MultiGetItemResponse itemResponse : multiGetResponse){

????????GetResponse response = itemResponse.getResponse();

????????if (response.isExists()){

????????????System.out.println(response.getSourceAsString());

????????}

????}

????client.close();

}

----------------------------------------更新文档------------------------------------

doc更新

创建更新对象

@Test

public void testUpdate1() throws Exception{

????UpdateRequest request = new UpdateRequest();

????request.index("blog");

????request.type("article");

????request.id("1");

????request.doc(XContentFactory.jsonBuilder() //doc 更新方法

????.startObject()

????????????.field("id","1")

????????????.field("title","更新:1")

????????????.field("content","更新:1")

????.endObject());

????UpdateResponse updateResponse = client.update(request).get();

????System.out.println("索引名称: " + updateResponse.getIndex());

????System.out.println("文档类型: "+updateResponse.getType());

????System.out.println("ID: "+updateResponse.getId());

????System.out.println("版本: "+updateResponse.getVersion());

????System.out.println("是否创建成功: "+updateResponse.isCreated()); //false

????client.close();

}

直接调用client.update

@Test

public void testUpdate2() throws Exception{

????UpdateResponse updateResponse =

????????????client.update(new UpdateRequest("blog", "article", "2")

????????????????????.doc(XContentFactory.jsonBuilder() //doc 更新方法

????????????????????????.startObject()

????????????????????????????.field("id", "2")

????????????????????????????.field("title", "更新:2")

????????????????????????????.field("content", "更新:2")

????????????????????????.endObject()))

????????????????????.get();

????System.out.println("索引名称: " + updateResponse.getIndex());

????System.out.println("文档类型: "+updateResponse.getType());

????System.out.println("ID: "+updateResponse.getId());

????System.out.println("版本: "+updateResponse.getVersion());

????System.out.println("是否创建成功: "+updateResponse.isCreated()); //false

????client.close();

}

创建并更新

@Test

public void testUpdate3() throws Exception{

????// 设置一个查询的条件,使用ID查询,如果查不到数据,则添加IndexRequest的文档数据

????IndexRequest indexRequest = new IndexRequest("blog1", "article", "4")

????????????.source(XContentFactory.jsonBuilder()

????????????????.startObject()

????????????????????.field("id", "4")

????????????????????.field("title", "李雪静加油")

????????????????????.field("content", "Fighting!")

????????????????.endObject());

????//设置更新的数据,使用ID查询,如果能查到,则更新UpdateRequest的数据

????UpdateRequest updateRequest = new UpdateRequest("blog1", "article", "4")

????????????.doc(XContentFactory.jsonBuilder()

????????????????????.startObject()

????????????????????.field("title", "new fighting~")

????????????????????.endObject())

????????????.upsert(indexRequest);

????UpdateResponse updateResponse = client.update(updateRequest).get();

????System.out.println("索引名称: " + updateResponse.getIndex());

????System.out.println("文档类型: "+updateResponse.getType());

????System.out.println("ID: "+updateResponse.getId());

????System.out.println("版本: "+updateResponse.getVersion());

????System.out.println("是否创建成功: "+updateResponse.isCreated()); //false

????client.close();

}

----------------------------------------删除文档------------------------------------

prepareDelete

@Test

public void deleteData(){

????DeleteResponse deleteResponse = client.prepareDelete("blog", "article", "3").get();

????System.out.println("索引名称: " + deleteResponse.getIndex());

????System.out.println("文档类型: "+deleteResponse.getType());

????System.out.println("ID: "+deleteResponse.getId());

????System.out.println("版本: "+deleteResponse.getVersion());

????System.out.println("是否删除成功: "+deleteResponse.isFound());

????client.close();

}

----------------------------------------查询文档------------------------------------

安装分词器之前的查询

es提供了queryStringQuery查询

针对多字短的query_string查询

@Test

public void testSearch(){

????SearchResponse searchResponse = client.prepareSearch("blog")

????????????.setTypes("article")

//默认分词器只能查找单个字,并没有把中文进行分词,需要我们安装一个分词器,IK分词器

????????????.setQuery(QueryBuilders.queryStringQuery("更新"))

????????????.get();

????//获取数据的结果对象

????SearchHits hits = searchResponse.getHits();

????//获取命中次数

????System.out.println("查询的结果数据有"+hits.getTotalHits()+"条");

????//遍历所有数据

????Iterator<SearchHit> iterator = hits.iterator();

????while (iterator.hasNext()){

????????SearchHit hit = iterator.next();

????????//获取整条数据

????????System.out.println(hit.getSourceAsString());

????????//获取单个字段

????????System.out.println("id: "+ hit.getSource().get("id"));

????????System.out.println("title: "+ hit.getSource().get("title"));

????????System.out.println("content: "+ hit.getSource().get("content"));

????}

????client.close();

}

原文地址:https://blog.51cto.com/14479068/2428919

时间: 2024-11-15 12:42:12

好程序员Java学习路线分享创建Java class的相关文章

好程序员前端学习路线分享模拟JavaScript中面向对象技术

好程序员前端学习路线分享模拟JavaScript中面向对象技术,在C#和Java语言中,面向对象是以类的方式实现的,特别是继承这个特性,类的方式继承表现出了强大的功能,而且也易于学习.JavaScript不是纯的面向对象的语言,而是基于对象的语言,对象的继承是以原型函数的形式继承的,很多初学者刚开始接触的时候不太理解,但是JavaScript这种以原型函数的形式实现面向对象技术,不仅是可行的,而且还为面向对象技术提供了动态继承的功能,本文主要讨论了JavaScript的面向对象技术.?一.原型对

好程序员云计算学习路线分享文件打包及压缩

好程序员云计算学习路线分享文件打包及压缩,建议针对目录 Demo: 复制未打包的文件到远程主机[[email protected] ~]# du -sh /etc39M /etc[[email protected] ~]# time scp -r /etc [email protected]:/tmp //将/etc目录... ===打包,压缩===[[email protected] ~]# tar -czf etc1.tar.gz /etc //-z 调用gzip : tar removei

好程序员云计算学习路线分享软件包管理

好程序员云计算学习路线分享软件包管理,安装/查询/卸载 一.软件的类型A. 源码包 需要编译 nginx-1.12.1.tar.gz B. 二进制包 已编译 mysql-community-common-5.7.12-1.el7.x86_64.rpm 常见二进制包系统平台 包类型 工具 在线安装(自动解决依赖关系)RedHat/Centos RPM rpm,rpmbuild yumUbuntu/Debian DPKG dpkg apt注意: 不管是源码包,还是二进制包,安装时都可能会有依赖关系!

好程序员Java学习路线分享JDBC初体验

好程序员Java学习路线分享JDBC初体验,JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序 -?Java 具有坚固.安全.易于使用.易于理解和可从网络上自动下载等特性,是编写数据库应用程序的杰出语言.所需要的只是 Java应用程序与各种不同数据库之

好程序员Java学习路线分享JS中的面向对象

好程序员Java学习路线分享JS中的面向对象,在JS中,一般情况下我们都是直接写函数,直接调用,但是发现JS中也有new关键字,那么new关键字作为创建对象的关键字,给我们的感觉就是在JS中可以定义一个类,然后用new创建对象,那么在JS中如何做呢?我们先看如下案例,下面的案例是写一个简单的喷泉效果的. window.onload = function(){ // 创建一个画布对象var canvas = document.createElement("canvas");// 设置大小

好程序员Java学习路线分享JVM类加载机制

好程序员Java学习路线分享JVM类加载机制,JVM相关概念 jdk<br>jdk(Java Development Kit)Java开发包,是Java开发人员用于编译和调试程序的一套程序的集合. jre<br>jre(Java Runtime Evironment)Java运行时环境,是运行Java程序的平台,所有的Java程序必须在这个平台中才能执行. jvm<br>jvm(Java Virtual Machine)Java虚拟机,是用代码虚拟出来的计算机,模拟执行

好程序员Java学习路线分享Java面试题之加载机制

好程序员Java学习路线分享Java面试题之加载机制,面试场景:面试官第一问:请问,我现在编写一个类,类全名如下:java.lang.String,我们知道JDK也给我们听过了一个java.lang.String,那么,我们编写的这个String类能否替换到JDK默认提供,也就是说程序实际运行的时候,会加载我们的String还是JDK的String?为什么?如果,你无法确定?那么第二问:了解类的加载机制吗?知道JDK的类加载器吗?双亲委托机制说说看如果,你还不了解,那么我们聊聊今天的天气吧!1,

好程序员Java学习路线分享SpringCloud

好程序员Java学习路线分享SpringCloud一.Web应用架构的演变随着互联网的发展,网站应用的规模不断扩大,Web应用架构也在不断的演变四个阶段:单一应用.垂直应用.分布式服务.流动计算1.单一应用架构当网站访问量很小时,只需要一个应用程序,将所有的功能都部署在一起,以减少部署节点和成本 此时关键问题:简化数据库操作,数据访问框架ORM是核心适用场景:小型网站.管理系统.简易办公系统 局限:1.扩展性差2.不便于协同开发3.不利于升级维护 2.垂直应用架构 当访问量逐渐增大,单一应用(单

好程序员Java学习路线分享5分钟了解基数排序

好程序员Java学习路线分享5分钟了解基数排序,前言:基数排序无需进行比较和交换,而是利用分配和收集两种基本操作实现排序.基数排序分为两种:第一种是LSD ,从最低位开始排序:第二种是 MSD, 从最高位开始排序. 基数排序思想介绍 分配:对于数字,每位的取值范围是0-9,因此需要10个容器(我们可以将其称为桶),这10个桶标号为0-9.每趟排序时,我们取每一个元素在该位的数值依次放入桶中. 收集:在一趟排序完成后,我们按顺序从0-9的桶中依次取元素. 继续进行分配和收集,直到最大位数排序完成.