ElasticSearch简单入门JavaAPI

public class EStudyFirst {

private TransportClient client =  null;

/**
 * 获取客户端连接对象
 */
@BeforeTest
public void  getClient() throws UnknownHostException {

    //获取settings设置对象
    Settings settings = Settings.builder().put("cluster.name", "myes").build();

    TransportAddress transportAddress1 = new TransportAddress(InetAddress.getByName("node01"), 9300);

    TransportAddress transportAddress2 = new TransportAddress(InetAddress.getByName("node02"), 9300);
    TransportAddress transportAddress3 = new TransportAddress(InetAddress.getByName("node02"), 9300);

    //客户端对象TransportClient
    client = new PreBuiltTransportClient(settings)
            .addTransportAddress(transportAddress1)
            .addTransportAddress(transportAddress2)
            .addTransportAddress(transportAddress3);
    System.out.println(client.toString());
}


/**
 * 自己手动拼装json进行添加数据
 */
@Test
public void createIndex1(){
        String json = "{" +
                "\"user\":\"kimchy\"," +
                "\"postDate\":\"2013-01-30\"," +
                "\"message\":\"travelying out Elasticsearch\"" +
                "}";

    IndexRequestBuilder indexRequestBuilder = client.prepareIndex("myindex1", "article", "1").setSource(json, XContentType.JSON);

    //调用get方法触发请求真正的去执行
    IndexResponse indexResponse = indexRequestBuilder.get();



}



/*
使用map创建索引
 */
@Test
public void createIndex2(){
    Map<String ,String > map = new HashMap<String,String >();
    map.put("name","zhangsan");
    map.put("age","28");
    map.put("sex","0");

    IndexRequestBuilder indexRequestBuilder = client.prepareIndex("myindex1", "article", "2").setSource(map);

    //触发请求真正的去执行
    indexRequestBuilder.get();


}


/**
 * 第三种创建索引的方式
 */
@Test
public  void createIndex3() throws IOException {

    IndexRequestBuilder indexRequestBuilder = client.prepareIndex("myindex1", "article", "3").setSource(new XContentFactory().jsonBuilder()
            .startObject()
            .field("name", "李四")
            .field("age", "55")
            .field("address", "北京").endObject());

    //触发请求真正的去执行
    IndexResponse indexResponse = indexRequestBuilder.get();



}


/**
 * 将JavaBean转换成为json格式的字符串
 */

@Test
public void createIndex4(){

    Person person = new Person();
    person.setAddress("北京");
    person.setAge(25);
    person.setEmail("163@163.com");
    person.setPhone("15898765432");

    String jsonString = JSONObject.toJSONString(person);

    IndexRequestBuilder indexRequestBuilder = client.prepareIndex("myindex1", "article", "4").setSource(jsonString, XContentType.JSON);

    IndexResponse indexResponse = indexRequestBuilder.get();

}


/**
 * 批量添加数据
 */
@Test
public void addBatch(){
    BulkRequestBuilder bulkRequestBuilder = client.prepareBulk();

    Person person = new Person();
    person.setPhone("13587963214");
    person.setId(5);

    Person person1 = new Person();
    person1.setPhone("13587963214");
    person1.setId(5);

    Person person2 = new Person();
    person2.setPhone("13587963214");
    person2.setId(5);

    Person person3 = new Person();
    person3.setPhone("13587963214");
    person3.setId(5);

   String personStr = JSONObject.toJSONString(person);

    String personStr1 = JSONObject.toJSONString(person1);

    String personStr2 = JSONObject.toJSONString(person2);

    String personStr3 = JSONObject.toJSONString(person3);


    IndexRequestBuilder indexRequestBuilder = client.prepareIndex("myindex1", "article", "5").setSource(personStr, XContentType.JSON);

    IndexRequestBuilder indexRequestBuilder1 = client.prepareIndex("myindex1", "article", "6").setSource(personStr1, XContentType.JSON);
    IndexRequestBuilder indexRequestBuilder2 = client.prepareIndex("myindex1", "article", "7").setSource(personStr2, XContentType.JSON);
    IndexRequestBuilder indexRequestBuilder3 = client.prepareIndex("myindex1", "article", "8").setSource(personStr3, XContentType.JSON);

    //批量添加,获取到bulkrequestBuilder对象
    BulkRequestBuilder add = bulkRequestBuilder.add(indexRequestBuilder).add(indexRequestBuilder1).add(indexRequestBuilder2).add(indexRequestBuilder3);

    BulkResponse bulkItemResponses = add.get();

}


/**
 * 更新索引操作
 */
 @Test
 public void updateIndex(){
   HashMap<String, String> map = new HashMap<>();
   map.put("phone", "15899996666");

   UpdateResponse updateResponse = client.prepareUpdate("myindex1", "article", "8").setDoc(map).get();

}


/**
 * 删除索引
 */
@Test
public void deleteIndex(){
   client.prepareDelete("myindex1","article","8").get();
}


/**
 * 删除整个索引库
 */
@Test
public void deleteIndexDB(){
   client.admin().indices().prepareDelete("myindex1").execute().actionGet();
}





/**
 * 初始化一批数据到索引库当中去准备做查询使用
 * 注意这里初始化的时候,需要给我们的数据设置分词属性
 * @throws Exception
 */
@Test
public void createIndexBatch() throws Exception {
    Settings settings = Settings
            .builder()
            .put("cluster.name", "myes") //节点名称, 在es配置的时候设置
            //自动发现我们其他的es的服务器
            .put("client.transport.sniff", "true")
            .build();
    //创建客户端
    TransportClient client = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("node01"), 9300));//以本机作为节点
    //创建映射
    XContentBuilder mapping = jsonBuilder()
            .startObject()
            .startObject("properties")
            //      .startObject("m_id").field("type","keyword").endObject()
            .startObject("id").field("type", "integer").endObject()
            .startObject("name").field("type", "text").field("analyzer", "ik_max_word").endObject()
            .startObject("age").field("type", "integer").endObject()
            .startObject("sex").field("type", "text").field("analyzer", "ik_max_word").endObject()
            .startObject("address").field("type", "text").field("analyzer", "ik_max_word").endObject()
            .startObject("phone").field("type", "text").endObject()
            .startObject("email").field("type", "text").endObject()
            .startObject("say").field("type", "text").field("analyzer", "ik_max_word").endObject()
            .endObject()
            .endObject();
    //pois:索引名   cxyword:类型名(可以自己定义)
    PutMappingRequest putmap = Requests.putMappingRequest("indexsearch").type("mysearch").source(mapping);
    //创建索引
    client.admin().indices().prepareCreate("indexsearch").execute().actionGet();
    //为索引添加映射
    client.admin().indices().putMapping(putmap).actionGet();


    BulkRequestBuilder bulkRequestBuilder = client.prepareBulk();
    Person lujunyi = new Person(2, "玉麒麟卢俊义", 28, 1, "水泊梁山", "17666666666", "lujunyi@itcast.com","hello world今天天气还不错");
    Person wuyong = new Person(3, "智多星吴用", 45, 1, "水泊梁山", "17666666666", "wuyong@itcast.com","行走四方,抱打不平");
    Person gongsunsheng = new Person(4, "入云龙公孙胜", 30, 1, "水泊梁山", "17666666666", "gongsunsheng@itcast.com","走一个");
    Person guansheng = new Person(5, "大刀关胜", 42, 1, "水泊梁山", "17666666666", "wusong@itcast.com","我的大刀已经饥渴难耐");
    Person linchong = new Person(6, "豹子头林冲", 18, 1, "水泊梁山", "17666666666", "linchong@itcast.com","梁山好汉");
    Person qinming = new Person(7, "霹雳火秦明", 28, 1, "水泊梁山", "17666666666", "qinming@itcast.com","不太了解");
    Person huyanzhuo = new Person(8, "双鞭呼延灼", 25, 1, "水泊梁山", "17666666666", "huyanzhuo@itcast.com","不是很熟悉");
    Person huarong = new Person(9, "小李广花荣", 50, 1, "水泊梁山", "17666666666", "huarong@itcast.com","打酱油的");
    Person chaijin = new Person(10, "小旋风柴进", 32, 1, "水泊梁山", "17666666666", "chaijin@itcast.com","吓唬人的");
    Person zhisheng = new Person(13, "花和尚鲁智深", 15, 1, "水泊梁山", "17666666666", "luzhisheng@itcast.com","倒拔杨垂柳");
    Person wusong = new Person(14, "行者武松", 28, 1, "水泊梁山", "17666666666", "wusong@itcast.com","二营长。。。。。。");

    bulkRequestBuilder.add(client.prepareIndex("indexsearch", "mysearch", "1")
            .setSource(JSONObject.toJSONString(lujunyi), XContentType.JSON)
    );
    bulkRequestBuilder.add(client.prepareIndex("indexsearch", "mysearch", "2")
            .setSource(JSONObject.toJSONString(wuyong), XContentType.JSON)
    );
    bulkRequestBuilder.add(client.prepareIndex("indexsearch", "mysearch", "3")
            .setSource(JSONObject.toJSONString(gongsunsheng), XContentType.JSON)
    );
    bulkRequestBuilder.add(client.prepareIndex("indexsearch", "mysearch", "4")
            .setSource(JSONObject.toJSONString(guansheng), XContentType.JSON)
    );
    bulkRequestBuilder.add(client.prepareIndex("indexsearch", "mysearch", "5")
            .setSource(JSONObject.toJSONString(linchong), XContentType.JSON)
    );
    bulkRequestBuilder.add(client.prepareIndex("indexsearch", "mysearch", "6")
            .setSource(JSONObject.toJSONString(qinming), XContentType.JSON)
    );
    bulkRequestBuilder.add(client.prepareIndex("indexsearch", "mysearch", "7")
            .setSource(JSONObject.toJSONString(huyanzhuo), XContentType.JSON)
    );
    bulkRequestBuilder.add(client.prepareIndex("indexsearch", "mysearch", "8")
            .setSource(JSONObject.toJSONString(huarong), XContentType.JSON)
    );
    bulkRequestBuilder.add(client.prepareIndex("indexsearch", "mysearch", "9")
            .setSource(JSONObject.toJSONString(chaijin), XContentType.JSON)
    );
    bulkRequestBuilder.add(client.prepareIndex("indexsearch", "mysearch", "10")
            .setSource(JSONObject.toJSONString(zhisheng), XContentType.JSON)
    );
    bulkRequestBuilder.add(client.prepareIndex("indexsearch", "mysearch", "11")
            .setSource(JSONObject.toJSONString(wusong), XContentType.JSON)
    );

    bulkRequestBuilder.get();
    client.close();

}


/**
 * 通过每条数据的系统id来进行查询
 */
@Test
public void getBySystemId(){
    //通过系统id来进行查询,调用prepareGet方法,传入三个参数
    GetRequestBuilder getRequestBuilder = client.prepareGet("indexsearch", "mysearch", "11");
    //获取到查询的数据结果
    GetResponse getResponse = getRequestBuilder.get();
    String id = getResponse.getId();//获取系统id为多少
    System.out.println("系统id为"+ id);
    String sourceAsString = getResponse.getSourceAsString();//将结果转换成为json格式的字符串
    System.out.println(sourceAsString);
}


/**
 * 查询索引库当中所有的数据
 */
@Test
public void queryAll(){
    SearchResponse searchResponse = client
            .prepareSearch("indexsearch")//指定我们查询的索引库
            .setTypes("mysearch")  //指定我们需要查询哪个类型
            .setQuery(QueryBuilders.matchAllQuery())  //指定我们查询的条件
            .get();  //调用get方法,触发我们的请求真正的去执行

    SearchHits hits = searchResponse.getHits();
    SearchHit[] hitsAll = hits.getHits();
    //每一个searchHit封装完了我们的一条数据
    for (SearchHit searchHit : hitsAll) {

        String id = searchHit.getId();
        System.out.println("系统id为" +  id);
        String sourceAsString = searchHit.getSourceAsString();
        System.out.println(sourceAsString);


    }

}


/**
 * 年龄范围值查询
 * 查询年龄是18到28的数据
 */
@Test
public void rangeQuery(){

    SearchResponse searchResponse = client.prepareSearch("indexsearch").setTypes("mysearch").setQuery(QueryBuilders.rangeQuery("age").gt(18).lte(28)).get();
    SearchHits hits = searchResponse.getHits();
    SearchHit[] hitsAll = hits.getHits();
    for (SearchHit searchHit : hitsAll) {
        System.out.println(searchHit.getId());
        System.out.println(searchHit.getSourceAsString());
    }



}


/**
 * 按照词条进行查询
 */
@Test
public void termQuery(){
    SearchResponse searchResponse = client.prepareSearch("indexsearch").setTypes("mysearch").setQuery(QueryBuilders.termQuery("say", "熟悉")).get();

    SearchHits hits = searchResponse.getHits();
    SearchHit[] hits1 = hits.getHits();
    for (SearchHit searchHit : hits1) {
        System.out.println(searchHit.getId());
        System.out.println(searchHit.getSourceAsString());
    }


}


@AfterTest
public void closeClient(){
    client.close();
}



}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值