好程序员Java学习路线分享创建Javaclass-创新互联

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

昌江ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联建站的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!

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 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 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();

}

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


分享名称:好程序员Java学习路线分享创建Javaclass-创新互联
网页链接:http://cdiso.cn/article/ccppch.html

其他资讯