JAVA API & Elasticsearch 7.10 基本查询操作(一)

总结一下最近参与项目学到的知识,不知道自己会不会坚持写Blog(;´д`)

总之先从ES基本操作开始了!


目录

AND查询

OR查询

范围查询


AND查询

List searchMustStudent(StudentQO studentQO) throws IOException;

public List searchMustStudent(StudentQO studentQO) throws IOException {

    //设置返回参数
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    //SELECT name, gender, age
    sourceBuilder.fetchSource(new String[]{"name", "gender", "age"}, null);
    //FROM student
    SearchRequest searchRequest = new SearchRequest("student");

    //设置查询条件
    BoolQueryBuilder mustQueryBuilder = QueryBuilders.boolQuery();
    //精确查询 WHERE id = studentQO.getId()
    mustQueryBuilder.must(QueryBuilders.termQuery("id", studentQO.getId()));
    /*
      //模糊查询 WHERE id like '123%'
      mustQueryBuilder.must(QueryBuilders.wildcardQuery("id", "123*"));
    */
    //AND name != ""
    mustQueryBuilder.mustNot(QueryBuilders.termQuery("name", ""));
    /*
      另一种方法:mustQueryBuilder.must(QueryBuilders.existsQuery("name"));
    */
    //设置排序字段 ORDER BY age DESC
    sourceBuilder.sort(new FieldSortBuilder("age").order(SortOrder.DESC));

    //设置返回所有数据,否则将返回前一万条数据
    sourceBuilder.trackTotalHits(true);
    //添加查询条件
    sourceBuilder.query(mustQueryBuilder);
    //设置返回时间
    sourceBuilder.timeout(new TimeValue(1000));
    //设置返回结果
    searchRequest.source(sourceBuilder);

    //连接ES 开始搜索
    SearchResponse response = client.search(searchRequest,RequestOptions.DEFAULT);
    //获取结果
    SearchHits searchHits = response.getHits();
    SearchHit[] hits = searchHits.getHits();
    List studentVOS = new ArrayList<>();
    for (SearchHit hit: hits) {
        Map source = hit.getSourceAsMap();
        StudentVO studentVO = new StudentVO();
        studentVO.setName((String) source.get("name"));
        studentVO.setGender((String) source.get("gender"));
        studentVO.setAge((int) source.get("age"));
        studentVOS.add(studentVO);
    }

    //获取结果总数
    TotalHits totalHits = searchHits.getTotalHits();
    long value = totalHits.value;

    return studentVOS;
}

OR查询

List searchShouldStudent(List studentQO) throws IOException;

public List searchShouldStudent(List studentQO) throws IOException {

    //设置返回参数
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    //SELECT name, gender, age
    sourceBuilder.fetchSource(new String[]{"name", "gender", "age"}, null);
    //FROM student
    SearchRequest searchRequest = new SearchRequest("student");

    //设置查询条件
    BoolQueryBuilder shouldQueryBuilder = QueryBuilders.boolQuery();
    //WHERE sid = studentQO.get(i).getId() OR .....
    for(int i = 0; i < studentQO.size(); i++){
        String id = studentQO.get(i).getId();
        shouldQueryBuilder.should(QueryBuilders.wildcardQuery("id", id));
    }
    /*
      //传入多个条件时推荐用这个,不会有逻辑问题
      //WHERE sid IN (idList)
      mustQueryBuider.must(QueryBuilders.termsQuery("id", idList))
    */

    //设置返回所有数据,否则将返回前一万条数据
    sourceBuilder.trackTotalHits(true);
    //添加查询条件
    sourceBuilder.query(shouldQueryBuilder);
    //设置返回时间
    sourceBuilder.timeout(new TimeValue(1000));
    //设置返回结果
    searchRequest.source(sourceBuilder);

    //连接ES 开始搜索
    SearchResponse response = client.search(searchRequest,RequestOptions.DEFAULT);
    //获取结果
    SearchHits searchHits = response.getHits();
    SearchHit[] hits = searchHits.getHits();
    List studentVOS = new ArrayList<>();
    for (SearchHit hit: hits) {
        Map source = hit.getSourceAsMap();
        StudentVO studentVO = new StudentVO();
        studentVO.setName((String) source.get("name"));
        studentVO.setGender((String) source.get("gender"));
        studentVO.setAge((int) source.get("age"));
        studentVOS.add(studentVO);
    }

    //获取结果总数
    TotalHits totalHits = searchHits.getTotalHits();
    long value = totalHits.value;

    return studentVOS;
}
如果要组合使用must和should,必须将should作为条件加入must中,否则should条件无法生效。BoolQueryBuilder mustQueryBuilder = QueryBuilders.boolQuery();
BoolQueryBuilder shouldQueryBuilder = QueryBuilders.boolQuery();
......
mustQueryBuilder.must(shouldQueryBuilder);

范围查询

List searchRangeStudent(int youngest, int eldest) throws IOException;

public List searchRangeStudent(int youngest, int eldest) throws IOException {

    //设置返回参数
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
    //SELECT name, gender, age
    sourceBuilder.fetchSource(new String[]{"name", "gender", "age"}, null);
    //FROM student
    SearchRequest searchRequest = new SearchRequest("student");

    //设置查询条件
    BoolQueryBuilder mustQueryBuilder = QueryBuilders.boolQuery();
    RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age");
    //WHERE youngest <= age AND age <= eldest
    rangeQueryBuilder.gte(youngest);
    rangeQueryBuilder.lte(eldest);
    mustQueryBuilder.must(rangeQueryBuilder);

    //设置返回所有数据,否则将返回前一万条数据
    sourceBuilder.trackTotalHits(true);
    //添加查询条件
    sourceBuilder.query(mustQueryBuilder);
    //设置返回时间
    sourceBuilder.timeout(new TimeValue(1000));
    //设置返回结果
    searchRequest.source(sourceBuilder);

    //连接ES 开始搜索
    SearchResponse response = client.search(searchRequest,RequestOptions.DEFAULT);
    //获取结果
    SearchHits searchHits = response.getHits();
    SearchHit[] hits = searchHits.getHits();
    List studentVOS = new ArrayList<>();
    for (SearchHit hit: hits) {
        Map source = hit.getSourceAsMap();
        StudentVO studentVO = new StudentVO();
        studentVO.setName((String) source.get("name"));
        studentVO.setGender((String) source.get("gender"));
        studentVO.setAge((int) source.get("age"));
        studentVOS.add(studentVO);
    }

    //获取结果总数
    TotalHits totalHits = searchHits.getTotalHits();
    long value = totalHits.value;

    return studentVOS;
}

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