【ElasticSearch7.X】学习笔记(二)

本文详细介绍了如何使用JavaAPI连接ElasticSearch7.8.0,包括创建、查询和删除索引,以及文档的增删改查操作。同时,还涵盖了批量操作、全量查询、条件查询、分页、排序、过滤字段、组合查询、范围查询、模糊查询、高亮查询和聚合查询等高级功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

四、JavaAPI使用

pom

<dependencies>
	<dependency>
	    <groupId>org.elasticsearch</groupId>
	    <artifactId>elasticsearch</artifactId>
	    <version>7.8.0</version>
	</dependency>
	<!-- elasticsearch 的客户端 -->
	<dependency>
	    <groupId>org.elasticsearch.client</groupId>
	    <artifactId>elasticsearch-rest-high-level-client</artifactId>
	    <version>7.8.0</version>
	</dependency>
	<!-- elasticsearch 依赖 2.x 的 log4j -->
	<dependency>
	    <groupId>org.apache.logging.log4j</groupId>
	    <artifactId>log4j-api</artifactId>
	    <version>2.8.2</version>
	</dependency>
	<dependency>
	    <groupId>org.apache.logging.log4j</groupId>
	    <artifactId>log4j-core</artifactId>
	    <version>2.8.2</version>
	</dependency>
	<dependency>
	    <groupId>com.alibaba</groupId>
	    <artifactId>fastjson</artifactId>
	    <version>2.0.10</version>
	</dependency>
	<!-- junit 单元测试 -->
	<dependency>
	    <groupId>junit</groupId>
	    <artifactId>junit</artifactId>
	    <version>4.12</version>
	</dependency>
	
	<dependency>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-web</artifactId>
	</dependency>
</dependencies>

4.1、客户端连接

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import java.io.IOException;

public class ELKClient {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端
        RestHighLevelClient client= new RestHighLevelClient(
                RestClient.builder(new HttpHost("192.168.3.34",9200,"http"))
        );
        //关闭客户端
        client.close();
    }
}

4.2、索引操作

4.2.1、创建索引

import org.apache.http.HttpHost;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import java.io.IOException;

public class ELKIndexCreate {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端 
        RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
        //创建请求
        CreateIndexRequest request=new CreateIndexRequest("students");
        //创建索引(请求,请求方式[默认])
        CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
        //响应状态
        System.out.println("创建索引是否成功::"+response.isAcknowledged());
        //关闭客户端
        client.close();
    }
}

4.2.2、查询索引

import org.apache.http.HttpHost;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetIndexResponse;
import java.io.IOException;

public class ELKIndexSearch {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端
        RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
        //创建请求 GetIndexRequest 
        GetIndexRequest request=new GetIndexRequest("students");
        //查询索引
        GetIndexResponse response = client.indices().get(request, RequestOptions.DEFAULT);
        System.out.println("别名::"+response.getAliases());
        System.out.println("索引结构::"+response.getMappings());
        System.out.println("配置::"+response.getSettings());
        //关闭客户端
        client.close();
    }
}

4.2.3、删除索引

import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexResponse;
import java.io.IOException;

public class ELKIndexDelete {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端
        RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
        //创建请求 DeleteIndexRequest 
        DeleteIndexRequest request=new DeleteIndexRequest("students");
        //删除索引
        AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);
        //响应状态
        System.out.println("删除操作::"+response.isAcknowledged());
        //关闭客户端
        client.close();
    }
}

4.3、文档操作

建立一个学生类

public class Student {
    private int id;
    private String name;
    private String sex;
    private int age;
    public int getId() {return id;}
    public void setId(int id) {this.id = id;}
    public String getName() { return name;}
    public void setName(String name) { this.name = name;}
    public String getSex() {return sex;}
    public void setSex(String sex) {this.sex = sex;}
    public int getAge() {return age;}
    public void setAge(int age) {this.age = age;}
}

4.3.1、创建文档

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.databind.util.JSONPObject;
import org.apache.http.HttpHost;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import java.io.IOException;

public class ELKDocInsert {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端
        RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
        //创建请求 IndexRequest 
        IndexRequest request=new IndexRequest();
        //设置索引并使用自定义id
        request.index("students").id("001");
        Student student=new Student();
        student.setId(001);
        student.setName("zhangsan");
        student.setSex("男");
        student.setAge(18);
        //需要JSON数据类型
        String JSONString = JSON.toJSONString(student);
        //传入数据,并指定类型为JSON
        request.source(JSONString, XContentType.JSON);
        //插入数据
        IndexResponse response = client.index(request, RequestOptions.DEFAULT);
        System.out.println("创建文档是否成::"+response.getResult());
        //关闭客户端
        client.close();
    }
}

4.3.2、更新数据

import com.alibaba.fastjson2.JSON;
import org.apache.http.HttpHost;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import java.io.IOException;

public class ELKDocUpdate {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端
        RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
        //创建请求 UpdateRequest 
        UpdateRequest request=new UpdateRequest();
        request.index("students").id("001");
        //需要更改的字段
        request.doc(XContentType.JSON,"name","lisi");
        //更新数据
        UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
        System.out.println("文档状态::"+response.getResult());
        //关闭客户端
        client.close();
    }
}

4.3.3、查询数据

import org.apache.http.HttpHost;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import java.io.IOException;

public class ELKDocSearch {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端
        RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
        //创建请求 GetRequest 
        GetRequest request=new GetRequest();
        request.index("students").id("001");
        //查询数据get
        GetResponse response = client.get(request, RequestOptions.DEFAULT);
        System.out.println("Source数据内容::"+response.getSourceAsString());
        //关闭客户端
        client.close();
    }
}

4.3.4、删除数据

import org.apache.http.HttpHost;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import java.io.IOException;

public class ELKDocDelete {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端
        RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
        //创建请求 DeleteRequest
        DeleteRequest request=new DeleteRequest();
        request.index("students").id("001");
        //删除数据
        DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
        System.out.println("response::"+response.toString());
        //关闭客户端
        client.close();
    }
}

4.4、复杂操作

4.4.1、批量操作

4.4.1.1、增加
import org.apache.http.HttpHost;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import java.io.IOException;

public class ELKComplexInsert {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端
        RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
        //创建请求 BulkRequest
        BulkRequest request=new BulkRequest();
        request.add(new IndexRequest().index("students").id("001").source(XContentType.JSON,"name","liuyi","id",001,"sex","男","age",10));
        request.add(new IndexRequest().index("students").id("002").source(XContentType.JSON,"name","chener","id",002,"sex","女","age",20));
        request.add(new IndexRequest().index("students").id("003").source(XContentType.JSON,"name","zhangsan","id",003,"sex","男","age",30));
        request.add(new IndexRequest().index("students").id("004").source(XContentType.JSON,"name","lisi","id",004,"sex","女","age",40));
        request.add(new IndexRequest().index("students").id("005").source(XContentType.JSON,"name","wangwu","id",005,"sex","男","age",50));
        request.add(new IndexRequest().index("students").id("006").source(XContentType.JSON,"name","zhaoliu","id",006,"sex","女","age",60));
        request.add(new IndexRequest().index("students").id("007").source(XContentType.JSON,"name","sunqi","id",007,"sex","男","age",70));
        //批量插入数据
        BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);
        System.out.println("花费时间::"+response.getTook());
        System.out.println("每条事件::"+response.getItems());
        //关闭客户端
        client.close();
    }
}
4.4.1.2、删除
import org.apache.http.HttpHost;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import java.io.IOException;

public class ELKComplexDelete {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端
        RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
        //创建请求 BulkRequest
        BulkRequest request=new BulkRequest();
        request.add(new DeleteRequest().index("students").id("005"));
        request.add(new DeleteRequest().index("students").id("006"));
        request.add(new DeleteRequest().index("students").id("007"));
        //批量删除数据
        BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);
        System.out.println("花费时间::"+response.getTook());
        System.out.println("每条事件::"+response.getItems());
        //关闭客户端
        client.close();
    }
}

4.4.2、全量查询

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;

public class ELKFullQuery {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端
        RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
        //创建请求 SearchRequest
        SearchRequest result=new SearchRequest();
        result.indices("students");
        //全量查询matchAllQuery 需要用到SearchSourceBuilder
        result.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
        //查询全部文档
        SearchResponse response = client.search(result, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        System.out.println("总条数::"+hits.getTotalHits());
        System.out.println("花费时间::"+response.getTook());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        //关闭客户端
        client.close();
    }
}

4.4.3、条件查询

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;

public class ELKConditionQuery {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端
        RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
        //创建请求 SearchRequest
        SearchRequest result=new SearchRequest();
        result.indices("students");
        //要寻找确切的term需要使用termQuery由QueryBuilders创建 结果作为SearchSourceBuilder().query的参数
        result.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("name","zhangsan")));
        //条件查询 name=张三
        SearchResponse response = client.search(result, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        System.out.println("总条数::"+hits.getTotalHits());
        System.out.println("花费时间::"+response.getTook());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        //关闭客户端
        client.close();
    }
}

4.4.4、分页查询

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;

public class ELKPaginationQuery {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端
        RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
        //创建请求 SearchRequest
        SearchRequest result=new SearchRequest();
        result.indices("students");
        //全量查询进行分页
        SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        //起始第几个
        builder.from(0);
        //每页几个
        builder.size(2);
        result.source(builder);
        //分页查询
        SearchResponse response = client.search(result, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        System.out.println("总条数::"+hits.getTotalHits());
        System.out.println("花费时间::"+response.getTook());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        //关闭客户端
        client.close();
    }
}

4.4.5、排序

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import java.io.IOException;

public class ELKSort {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端
        RestHighLevelClient client= new RestHighLevelClientRestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
        //创建请求 SearchRequest
        SearchRequest result=new SearchRequest();
        result.indices("students");
        //全量查询进行排序
        SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        //根据age倒序排序
        builder.sort("age", SortOrder.DESC);
        result.source(builder);
        //排序查询
        SearchResponse response = client.search(result, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        System.out.println("总条数::"+hits.getTotalHits());
        System.out.println("花费时间::"+response.getTook());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        //关闭客户端
        client.close();
    }
}

4.4.6、过滤字段

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import java.io.IOException;

public class ELKFilterFields {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端
        RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
        //创建请求 SearchRequest
        SearchRequest result=new SearchRequest();
        result.indices("students");
        //全量查询
        SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
        //排除字段
        String[] excludes={};
        //包含字段
        String[] include={"name"};
        //include,excludes顺序不能颠倒
        builder.fetchSource(include,excludes);
        result.source(builder);
        //过滤
        SearchResponse response = client.search(result, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        System.out.println("总条数::"+hits.getTotalHits());
        System.out.println("花费时间::"+response.getTook());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        //关闭客户端
        client.close();
    }
}

4.4.7、组合查询

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;

public class ELKCombinedQuery {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端
        RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
        //创建请求 SearchRequest
        SearchRequest result=new SearchRequest();
        result.indices("students");
        //创建SearchSourceBuilder进行 查询
        SearchSourceBuilder builder = new SearchSourceBuilder();
        //创建 BoolQueryBuilder 进行条件查询 
        BoolQueryBuilder  boolQueryBuilder= QueryBuilders.boolQuery();
        //must必须满足 should允许满足 must_not必须不满足
        boolQueryBuilder.must(QueryBuilders.matchQuery("name","zhangsan"));
        builder.query(boolQueryBuilder);
        result.source(builder);
        //组合查询
        SearchResponse response = client.search(result, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        System.out.println("总条数::"+hits.getTotalHits());
        System.out.println("花费时间::"+response.getTook());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        //关闭客户端
        client.close();
    }
}

4.4.8、范围查询

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;

public class ELKRangeQuery {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端
        RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
        //创建请求 SearchRequest
        SearchRequest result=new SearchRequest();
        result.indices("students");
        //创建查询 SearchSourceBuilder
        SearchSourceBuilder builder = new SearchSourceBuilder();
        //使用哪个字段进行范围查询
        RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age");
        //gte大于等于 gt大于 lt小于 lte小于等于
        rangeQueryBuilder.gte(30);
        builder.query(rangeQueryBuilder);
        result.source(builder);
        //组合查询
        SearchResponse response = client.search(result, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        System.out.println("总条数::"+hits.getTotalHits());
        System.out.println("花费时间::"+response.getTook());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        //关闭客户端
        client.close();
    }
}

4.4.9、模糊查询

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.Fuzziness;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.FuzzyQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;

public class ELKFuzzyQuery {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端
        RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
        //创建请求 SearchRequest
        SearchRequest result=new SearchRequest();
        result.indices("students");
        //创建查询 SearchSourceBuilder
        SearchSourceBuilder builder = new SearchSourceBuilder();
        //创建模糊查询FuzzyQueryBuilder fuzzyQuery(字段,模板) fuzziness 字符误差数  取值有:zero、one、two、auto
        FuzzyQueryBuilder fuzziness = QueryBuilders.fuzzyQuery("name", "zhangs").fuzziness(Fuzziness.TWO);
        builder.query(fuzziness);
        result.source(builder);
        //模糊查询
        SearchResponse response = client.search(result, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        System.out.println("总条数::"+hits.getTotalHits());
        System.out.println("花费时间::"+response.getTook());
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        //关闭客户端
        client.close();
    }
}

4.4.10、高亮查询

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import java.io.IOException;

public class ELKHighlightQuery {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端
        RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
        //创建请求
        SearchRequest result=new SearchRequest();
        result.indices("students");
        //创建查询
        SearchSourceBuilder builder = new SearchSourceBuilder();
        //查询条件与值
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "zhangsan");
        builder.query(termQueryBuilder);
        //创建高亮
        HighlightBuilder highlightBuilder=new HighlightBuilder();
        //前缀标签
        highlightBuilder.preTags("<font color='red'>");
        //后缀标签
        highlightBuilder.postTags("</font>");
        //高亮的值
        highlightBuilder.field("name");
        builder.highlighter(highlightBuilder);
        result.source(builder);
        //高亮
        SearchResponse response = client.search(result, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        System.out.println("总条数::"+hits.getTotalHits());
        System.out.println("花费时间::"+response.getTook());
        System.out.println("高亮显示::"+response);
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        //关闭客户端
        client.close();
    }
}

4.4.11、聚合查询

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.adjacency.AdjacencyMatrixAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;

public class ELKAggregateQuery {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端
        RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
        //创建请求 SearchRequest 
        SearchRequest result=new SearchRequest();
        result.indices("students");
        //创建查询
        SearchSourceBuilder builder = new SearchSourceBuilder();
        //创建 分组 max取最大值 field字段
        AggregationBuilder builder1= AggregationBuilders.max("maxAge").field("age");
        builder.aggregation(builder1);
        result.source(builder);
        //聚合查询
        SearchResponse response = client.search(result, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        System.out.println("总条数::"+hits.getTotalHits());
        System.out.println("花费时间::"+response.getTook());
        System.out.println("最大值::"+response);
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        //关闭客户端
        client.close();
    }
}

4.4.12、分组查询

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.adjacency.AdjacencyMatrixAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;

public class ELKAggregateQuery {
    public static void main(String[] args) throws IOException {
        //创建ELK客户端
        RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
        //创建请求 SearchRequest
        SearchRequest result=new SearchRequest();
        result.indices("students");
        //创建查询 SearchSourceBuilder
        SearchSourceBuilder builder = new SearchSourceBuilder();
        //创建分组  terms组名 field字段
        AggregationBuilder builder1= AggregationBuilders.terms("ageGroup").field("age");
        builder.aggregation(builder1);
        result.source(builder);
        //聚合查询
        SearchResponse response = client.search(result, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        System.out.println("总条数::"+hits.getTotalHits());
        System.out.println("花费时间::"+response.getTook());
        System.out.println("分组情况::"+response);
        for(SearchHit hit:hits){
            System.out.println(hit.getSourceAsString());
        }
        //关闭客户端
        client.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值