请选择 进入手机版 | 继续访问电脑版

好程序员-千锋教育旗下高端IT职业教育品牌

400-811-9990
我的账户
好程序员

专注高端IT职业培训

亲爱的猿猿,欢迎!

已有账号,请

如尚未注册?

[JavaEE] 好程序员Java培训分享创建Java class

[复制链接]
叶子老师 发表于 2019-8-12 16:07:44 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
好程序员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());
}
2. 使用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();
}
3. 使用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();
}
好程序员Java培训官网:http://www.goodprogrammer.org/javaEE_class.shtml

精彩内容,一键分享给更多人!
回复

使用道具 举报

您需要登录后才可以回帖

本版积分规则

关注我们
好程序员
千锋好程序员

北京校区(总部):北京市海淀区宝盛北里西区28号中关村智诚科创大厦

深圳西部硅谷校区:深圳市宝安区宝安大道5010号深圳西部硅谷B座A区605-619

杭州龙驰智慧谷校区:浙江省杭州市下沙经济技术开发区元成路199号龙驰智慧谷B座7层

郑州校区:郑州市二七区航海中路60号海为科技园C区10层、12层

Copyright 2007-2019 北京千锋互联科技有限公司 .All Right

京ICP备12003911号-5 京公安网11010802011455号

请您保持通讯畅通1对1咨询马上开启