Elasticsearch8常用查询api,java ElasticsearchClient写法和原生Rest DSL写法

这篇具有很好参考价值的文章主要介绍了Elasticsearch8常用查询api,java ElasticsearchClient写法和原生Rest DSL写法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0、前置条件

0.1、ES查询结果转换

    /**
     * 查询结果转换
     *
     * @param searchResponse 返回结果
     * @return List<Object>
     */
    public static List<Map<String, Object>> searchResponse2List(SearchResponse<ObjectNode> searchResponse) {

        if (searchResponse == null) {return new ArrayList<>(0);}
        if (searchResponse.hits() == null) {return new ArrayList<>(0);}
        if (CommonUtils.isCollectionEmpty(searchResponse.hits().hits())) {return new ArrayList<>(0);}

        List<Hit<ObjectNode>> hits = searchResponse.hits().hits();

        List<Map<String, Object>> list = new ArrayList<>(hits.size());
        for (Hit<ObjectNode> hit : hits) {
            ObjectNode node = hit.source();
            Map<String, Object> map = this.objectNode2Map(node);
            list.add(map);
        }
        return list;
    }

    /**
     * objectNode转Map
     *
     * @return Map<String, Object>
     */
    public static Map<String, Object> objectNode2Map(ObjectNode objectNode) {
        if (null == objectNode) {return new HashMap<>(0);}
        if (objectNode.isEmpty()) {return new HashMap<>(0);}
        ObjectMapper objectMapper = new ObjectMapper();
        return objectMapper.convertValue(objectNode, new TypeReference<Map<String, Object>>() {
        });
    }

0.3、查询请求

SearchRequest.Builder searchRequest = new SearchRequest.Builder();
searchRequest.query(q -> q.bool(b -> b.must(${query})));

SearchResponse<ObjectNode> response;
response = client.search(searchRequest.trackTotalHits(t->t.enabled(true)).build(), ObjectNode.class);

1、类型

1.1、 matchAll

Java Client

 searchRequest.query(q -> q.matchAll(m -> m));

Rest Api

{
 "query": {
  "match_all": {}
 }
}   

1.2、 match

Java Client

Query query =
        Query.of(q -> q.
                match(m -> m
                        .field(${field})
                        .query(FieldValue.of(${value}))
                )
        );

Rest Api

{
 "query": {
  "match": {
   "message": {
    "query": "this is a test"
   }
  }
 }
}

1.2、 terms 词查询,多个值

Java Client

List<FieldValue> terms = new ArrayList<>();
terms.add(FieldValue.of(${value1}));
terms.add(FieldValue.of(${value2}));

Query query =
        Query.of(q -> q.
                terms(t -> t
                        .field(${field})
                        .terms(tt -> tt.value(terms))
                )
        );

Rest Api

{
  "query": {
    "terms": {
      "${field}": [ "${value1}", "${value2}" ],
      "boost": 1.0
    }
  }
}

1.3、 range 范围

Java Client

Query query =
        Query.of(q -> q
                .range(r -> {
                            r.field(${field});
                            if (${true}) {
                                r.gte(${value1});
                            } else {
                                r.gt(${value1});
                            }
                            if (${true}) {
                                r.lte(${value2});
                            } else {
                                r.lt(${value2});
                            }
                            return r;
                        }
                )
        );

Rest Api

{
  "query": {
    "range": {
      "age": {
        "gte": 10,
        "lte": 20,
        "boost": 2.0
      }
    }
  }
}

1.4、 wildcard 通配符

  • ?用来匹配任意字符,
  • *用来匹配零个或者多个字符。

Java Client

//?用来匹配任意字符,*用来匹配零个或者多个字符。
String value = condition.getValue().replace("_", "?");
value = value.replace("%", "*");

String finalValue = value;
Query query =
        Query.of(q -> q
                .wildcard(t -> t
                        .field(${field})
                        .value(${finalValue})
                )
        );

Rest Api

{
  "query": {
    "wildcard": {
      "${field}": {
        "value": "${value}",
        "boost": 1.0,
        "rewrite": "constant_score"
      }
    }
  }
}

1.5、 prefix 前缀

Java Client

Query query =
        Query.of(q -> q
                .prefix(t -> t
                        .field(${field})
                        .value(${value})
                )
        );

Rest Api

{
  "query": {
    "prefix": {
      "${field}": {
        "value": "${value}"
      }
    }
  }
}

1.6、 geo_distance 地理距离查询

Java Client

        Query query =
                Query.of(q -> q
                        .geoDistance(t -> t
                                .field(${field})
                                .location(l -> l
                                        .latlon(ll -> ll
                                                .lat(${lat})
                                                .lon(${lon})
                                        )
                                )
                                .distance(String.valueOf(${distance}))
                        )
                );
{
  "query": {
    "bool": {
      "must": {
        "match_all": {}
      },
      "filter": {
        "geo_distance": {
          "distance": "200km",
          "pin.location": {
            "lat": 40,
            "lon": -70
          }
        }
      }
    }
  }
}

1.5、 regexp 正则

Java Client

Query query =
        Query.of(q -> q
                .regexp(t -> t
                        .field(${field})
                        .value(${value})
                )
        );

Rest Api文章来源地址https://www.toymoban.com/news/detail-472580.html

{
  "query": {
    "regexp": {
      "user.id": {
        "value": "k.*y",
        "flags": "ALL",
        "case_insensitive": true,
        "max_determinized_states": 10000,
        "rewrite": "constant_score"
      }
    }
  }
}

到了这里,关于Elasticsearch8常用查询api,java ElasticsearchClient写法和原生Rest DSL写法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot 整合ElasticSearch 常用的插入查询,模糊查询,范围查询

    repository.deleteById(id); } catch (Exception ex) { ex.printStackTrace(); return false; } return true; } public Dog saveDog(Dog dog) { try { Dog save = repository.save(dog); System.out.println(“结果:”+save.toString()); return save; } catch (Exception ex) { ex.printStackTrace(); return null; } } public Boolean saveDogAll(List dogsList) { try { reposit

    2024年04月22日
    浏览(43)
  • elasticsearch的常用查询语法(大全)

    参考文章网址:https://www.cnblogs.com/xiohao/p/12970224.html es查询 修改时,不指定的属性会自动覆盖,只保留指定的属性(不正确的修改指定文档方式) 使用POST命令,在id后面跟_update,要修改的内容放到doc文档(属性)中(正确的修改指定文档方式) 准备数据 查询语句 输出结果 通过观察

    2024年02月05日
    浏览(47)
  • 常用的Elasticsearch查询DSL

    1.基本查询 2.多条件查询 3.范围查询 4.复杂查询 5.聚合查询

    2024年02月12日
    浏览(49)
  • ElasticSearch常用查询命令查看基本信息

    查看es的集群状态 http://IP:9200/_cat/healthv 注: IP指es集群某个ip地址, v表示格式化输出 查看es集群节点列表 http://IP:9200/_cat/nodesv 查看es集群所有索引及数据大小 http://IP:9200/_cat/indicesv 查看单个索引结构信息 http://IP:9200/indexNamepretty=true 注: indexName是索引名字, pretty=true表示格式化输出

    2024年02月03日
    浏览(38)
  • Elasticsearch常用查询语法及RestClient操作

    match查询 :全文检索查询的一种,会对用户内容分词,然后去倒排索引库检索,语法。 multi_match :和match类似,但是它允许多个字段进行查询 解释:在 hotel索引库 中按照 address 和 name 两个字段搜索值 包含北京 的文档 精准查询一般是查找keyword,数值,日期,boolean等 不可分

    2024年04月25日
    浏览(50)
  • 【微服务】Elasticsearch常用查询&结果处理(三)

    🚗Es学习·第三站~ 🚩Es学习起始站:【微服务】Elasticsearch概述环境搭建(一) 🚩本文已收录至专栏:微服务探索之旅 👍希望您能有所收获 在上一站的学习中,我们已经导入了大量数据到es中,实现了数据存储功能。接下来如需看自己实操效果请根据上一站的 三.环境搭建 部

    2024年02月04日
    浏览(40)
  • Elasticsearch 常用的增加、删除、修改、查询语句

    新增 删除 修改 批量增删改 查询 查询指定索引下全部数据 查询指定索引下指定id的数据 查询指定索引下全部数据 查询指定值(match) 在多个字段中查询指定值(multi_match) match、multi_match是模糊匹配,匹配时会对所查找的进行分词,然后按分词匹配查找。 term 查询

    2024年02月03日
    浏览(42)
  • Elasticsearch8.x版本中RestHighLevelClient被弃用,新版本中全新的Java客户端Elasticsearch Java API Client中常用API练习

    在Es7.15版本之后,es官方将它的高级客户端RestHighLevelClient标记为弃用状态。同时推出了全新的java API客户端Elasticsearch Java API Client,该客户端也将在Elasticsearch8.0及以后版本中成为官方推荐使用的客户端。 Elasticsearch Java API Client支持除Vector title search API和Find structure API之外的所有

    2023年04月08日
    浏览(52)
  • Elasticsearch基础学习-常用查询和基本的JavaAPI操作ES

    Elasticsearch是一个基于 lucene 、分布式、通过Restful方式进行交互的 近实时搜索 平台框架。 ELK技术栈是Elasticsearch、Logstash、Kibana三大开元框架首字母大写简称。 而Elasticsearch 是一个 开源的高扩展的分布式全文搜索引擎 , 是整个 ELK技术栈的核心。 Elasticsearch是一个基于lucene、分

    2024年02月11日
    浏览(57)
  • 手机通讯类、ip查询、智能核验、生活常用API接口推荐

    手机号码归属地:提供三大运营商的手机号码归属地查询。 空号检测:通过手机号码查询其在网活跃度,返回包括空号、停机等状态。 手机在网状态:支持传入三大运营商的号码,查询手机号在网状态,返回在网等多种状态。 短信验证码:支持三大运营商,支持大容量高并

    2024年02月05日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包