ElasticSearch--JavaAPI

ElasticSearch的JavaAPI

  • 1、写入
  • 2、查询
  • 3、更新
  • 4、删除

ElasticSearch--JavaAPI_第1张图片

1、写入

查看配置文件
 more /export/servers/es/elasticsearch6.0.0/config/elasticsearch.yml 

ElasticSearch--JavaAPI_第2张图片

  • 构建连接客户端
   /**
     * 构建连接ES的客户端对象
     * @throws UnknownHostException
     */
    @Before
    public void getEsClient() throws UnknownHostException {
     
        //构建一个配置管理对象Setting
        Settings settings = Settings.builder().put("cluster.name","myes").build();
        //构建ES的客户端
        client = new PreBuiltTransportClient(settings)
            .addTransportAddress(new TransportAddress(InetAddress.getByName("node-01"),9300))
            .addTransportAddress(new TransportAddress(InetAddress.getByName("node-02"),9300))
            .addTransportAddress(new TransportAddress(InetAddress.getByName("node-03"),9300));
    }
  • 关闭客户端连接
/**
 * 释放资源连接
 */
@After
public void close(){
     
    client.close();
}
  • 插入Json数据
//插入Json数据
JSONObject json1 = new JSONObject();
json1.put("name","liudehua");
json1.put("age",20);
json1.put("sex","0");
//将json类型转为json字符串
String str1 = JSONObject.toJSONString(json1);
//构建写入请求
IndexRequestBuilder requestBuilder = client.prepareIndex(indexName, typeName, "1").setSource(str1, XContentType.JSON);
//执行请求
requestBuilder.execute().actionGet();
  • 插入Map格式数据
Map<String,String> maps = new HashMap<>();
    maps.put("name","caiyilin");
    maps.put("age","18");
    maps.put("sex","1");
    //插入一条数据
    client.prepareIndex(indexName,typeName,"2").setSource(maps).execute().actionGet();
  • 使用XContentBuilder构建数据
//使用XContentBuilder构建数据
XContentBuilder xContentBuilder = XContentFactory.jsonBuilder()
        .startObject()
        .field("name","zhoujielun")
        .field("age","22")
        .field("addr","zhongguotaiwan")
        .endObject();
client.prepareIndex(indexName,typeName,"3").setSource(xContentBuilder).get();
  • 插入Java Bean对象数据
  //插入Java Bean对象数据:将JavaBean变成JSON字符串
    Person person = new Person();
    person.setName("zhouchuanxiong");
    person.setAge(18);
    person.setSex(0);
    //转为Json字符串
    String jsonString = JSON.toJSONString(person);
    //插入
    client.prepareIndex(indexName,typeName,"4").setSource(jsonString,XContentType.JSON).get();
  • 批量插入
//批量插入
    //构建一个 bulk对象
    BulkRequestBuilder bulk = client.prepareBulk();
    //构建插入数据的请求对象
    JSONObject json2 = new JSONObject();
    json2.put("name","renxianqi");
    json2.put("age",20);
    json2.put("sex","0");
    //将json类型转为json字符串
    String str2 = JSONObject.toJSONString(json2);
    //构建写入请求
    IndexRequestBuilder requestBuilder1 = client.prepareIndex(indexName, typeName, "5").setSource(str2, XContentType.JSON);
    //构建插入数据的请求对象
    JSONObject json3 = new JSONObject();
    json3.put("name","wubai");
    json3.put("age",20);
    json3.put("sex","0");
    //将json类型转为json字符串
    String str3 = JSONObject.toJSONString(json3);
    //构建写入请求
    IndexRequestBuilder requestBuilder2 = client.prepareIndex(indexName, typeName, "6").setSource(str3, XContentType.JSON);
    //将两个请求对象放入bulk
    bulk.add(requestBuilder1);
    bulk.add(requestBuilder2);
    //执行整个bulk
    bulk.get();

2、查询

  • 先执行cn.hanjiaxiaozhi.es.getdata.BulkDataTest,插入模拟数据
  • 查询某个documentId的数据
GetResponse response = client.prepareGet(indexName, typeName, "11").get();
    //打印结果
    Map<String, Object> maps = response.getSourceAsMap();//将获取的数据变成map对象
    String sourceAsString = response.getSourceAsString();//将获取的数据变成JSON字符串
    System.out.println(maps);
    System.out.println(sourceAsString);
  • matchAll查询所有数据
  SearchResponse searchResponse = client.prepareSearch(indexName)
            //指定索引类型
            .setTypes(typeName)
            //指定查询器类型
            .setQuery(QueryBuilders.matchAllQuery())
            //指定查询条数
            .setSize(11)
            //执行
            .get();
    //输出结果
    SearchHit[] hits = searchResponse.getHits().getHits();
    for (SearchHit hit : hits) {
     
        //打印每一条数据
        System.out.println(hit.getSourceAsString());
    }
  • range范围查询
   SearchResponse range = client.prepareSearch(indexName)
            .setTypes(typeName)
            .setQuery(QueryBuilders.rangeQuery("age").gte(18).lt(28))
            .get();
    SearchHit[] hits = range.getHits().getHits();
    for (SearchHit hit : hits) {
     
        System.out.println(hit.getSourceAsString());
    }
  • term词条查询
  SearchResponse term = client.prepareSearch(indexName)
            .setTypes(typeName)
            .setQuery(QueryBuilders.termQuery("say", "大刀的"))
            .get();
    SearchHit[] hits = term.getHits().getHits();
    for (SearchHit hit : hits) {
     
        System.out.println(hit.getSourceAsString());
    }
  • match匹配查询
 SearchResponse match = client.prepareSearch(indexName)
            .setTypes(typeName)
            .setQuery(QueryBuilders.matchQuery("say", "大刀的"))
            .get();
    SearchHit[] hits = match.getHits().getHits();
    for (SearchHit hit : hits) {
     
        System.out.println(hit.getSourceAsString());
    }
  • fuzzy模糊查询
SearchResponse fuzzy = client.prepareSearch(indexName)
        .setTypes(typeName)
        .setQuery(QueryBuilders.fuzzyQuery("say", "helee").fuzziness(Fuzziness.TWO))
        .get();
SearchHit[] hits = fuzzy.getHits().getHits();
for (SearchHit hit : hits) {
     
    System.out.println(hit.getSourceAsString());
}
  • 通配符查询
  //todo:7-通配符:?代表一个字母,*代表多个字母,只能匹配英文
    SearchResponse wildcard = client.prepareSearch(indexName)
            .setTypes(typeName)
            .setQuery(QueryBuilders.wildcardQuery("say", "he???")).get();

    SearchHit[] hits = wildcard.getHits().getHits();
    for (SearchHit hit : hits) {
     
        System.out.println(hit.getSourceAsString());
    }
  • bool查询
   RangeQueryBuilder age = QueryBuilders.rangeQuery("age").gt(18).lt(28);
    TermQueryBuilder sex = QueryBuilders.termQuery("sex", "1");
    //age和sex是并列条件
    BoolQueryBuilder bool1 = QueryBuilders.boolQuery().must(age).must(sex);
    RangeQueryBuilder id = QueryBuilders.rangeQuery("id").gt(5).lt(13);

    SearchResponse bool = client.prepareSearch(indexName)
            .setTypes(typeName)
            //两个条件满足其一
            .setQuery(QueryBuilders.boolQuery().should(bool1).should(id))
            .get();
    SearchHit[] hits = bool.getHits().getHits();
    for (SearchHit hit : hits) {
     
        System.out.println(hit.getSourceAsString());
    }
  • 分页查询
 SearchResponse page = client.prepareSearch(indexName)
            .setTypes(typeName)
            .setFrom(0)
            .setSize(3)
            .addSort("age", SortOrder.DESC)
            .get();

    SearchHit[] hits = page.getHits().getHits();
    for (SearchHit hit : hits) {
     
        System.out.println(hit.getSourceAsString());
    }
  • 高亮查询
//todo:10-高亮:这是关键字
//先构建查询器
SearchRequestBuilder requestBuilder = client.prepareSearch(indexName)
        .setTypes(typeName)
        .setQuery(QueryBuilders.termQuery("say", "大刀"));
//设置高亮的格式
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.preTags("").field("say").postTags("");
//配置高亮
SearchResponse searchResponse = requestBuilder.highlighter(highlightBuilder).get();
//输出结果
SearchHit[] hits = searchResponse.getHits().getHits();
for (SearchHit hit : hits) {
     
    //取出高亮的部分
    Text[] says = hit.getHighlightFields().get("say").fragments();
    //打印每个高亮数据
    for (Text say : says) {
     
        System.out.println(say);
    }
}

3、更新

/**
 * 实现数据的更新
 */
@Test
public void updateData(){
     
    Person person = new Person(5, "宋江", 100, 1, "水泊梁山", "110", "[email protected]", "我很快乐");
    String jsonString = JSON.toJSONString(person);
    client.prepareUpdate(indexName,typeName,"1").setDoc(jsonString, XContentType.JSON).get();
}

4、删除

   /**
     * 实现数据删除
     */
    @Test
    public void deleteData(){
     
        //todo:1-根据id进行删除
//        client.prepareDelete(indexName,typeName,"1").get();
        //todo:2-根据查询条件删除:删除25岁以上的数
//        DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
//                .source(indexName)
//                .filter(QueryBuilders.rangeQuery("age").gt(25))
//                .get();
        //todo:3-删库
        client.admin().indices().prepareDelete(indexName).get();
    }

你可能感兴趣的:(ELK,elasticsearch)