Elasticsearch查询文档--常见API篇(附详细代码和案例图文)

这篇具有很好参考价值的文章主要介绍了Elasticsearch查询文档--常见API篇(附详细代码和案例图文)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将介绍Elasticsearch在Java中的几种API的使用,这块内容不作为面试中的重点。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞
Elasticsearch查询文档--常见API篇(附详细代码和案例图文)

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,在一家满意的公司实习👏👏

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

Elasticsearch查询文档--常见API篇(附详细代码和案例图文)

Java中API查询文档

Elasticsearch在网页端查询文档对应的DSL语句如下:

GET /hotel/_search
{
  "query": {
    "match": {
      "all": "如家"
    }
  },
  "highlight": {
    "fields": {
      "name": {
        "require_field_match": "false"
      }
    }
  }
}

执行上述语句打印结果如下:

Elasticsearch查询文档--常见API篇(附详细代码和案例图文)

在Java代码中我们需要准备request,DSL语句以及发送请求

    private RestHighLevelClient client;
    @Test
    void testMatchAll() throws IOException {
        //准备request
        SearchRequest request = new SearchRequest("hotel");//hotel为我们之前文章中所建立的索引库
        //准备DSL语句,查询所有文档
        request.source().query(QueryBuilders.matchAllQuery());
        //发送请求
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //打印结果
        System.out.println(response);
    }
    @BeforeEach
    void setUp() {
        client = new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://192.168.220.***:9200")
        ));
    }
    @AfterEach
    void tearDown() throws IOException {
        client.close();
    }
}

如下图所示,打印除开的结果为String类型,可以优化为HotelDoc对象类型。
Elasticsearch查询文档--常见API篇(附详细代码和案例图文)
其对应的Java代码改进后如下,以下的步骤是根据上面网页端响应出来的结果由外到内逐层解析出来的,相关详细注释如下:

    @Test
    void testMatchAll() throws IOException {
        //准备request
        SearchRequest request = new SearchRequest("hotel");
        //准备DSL语句
        request.source().query(QueryBuilders.matchAllQuery());
        //发送请求
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //解析响应结果,对于网页端的hits,参考json解析结果由外到内逐层解析
        SearchHits searchHits = response.getHits();
        //获取命中的总条数
        TotalHits total = searchHits.getTotalHits();
        //打印搜索出多少条数据
        System.out.println("共搜索出"+total+"条数据");
        //搜索出的文档数组
        SearchHit[] hits = searchHits.getHits();
        //遍历文档数组
        for (SearchHit hit : hits) {
            //获取文档source
            String json = hit.getSourceAsString();
            //反序列为HotelDoc对象
            HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
            //打印输出
            System.out.println(hotelDoc);
        }

执行上述代码所得结果如下,已反序列化为HotelDoc对象:
Elasticsearch查询文档--常见API篇(附详细代码和案例图文)

部分小结:

RestAPI其中构建DSL是通过RestHighLevelClient的source()方法实现的,如同我们浏览器中json中写的方法,其包含很多功能,如排序,分页,高亮等:
Elasticsearch查询文档--常见API篇(附详细代码和案例图文)
RestAPI中构建查询条件的核心部分是由QueryBuilders工具类提供的,其中包含了很多种查询方法。

全文查询

全文检索查询的match和multi_match查询与match_all的API基本一致,主要就是query部分的查询条件不一致,例如:

//这里的all是整合了需要查询的组合字段,在建立索引库时候添加的
request.source().query(QueryBuilders.matchQuery("all", "如家"));

除了此处不一致以外,其他代码均与上面一致
Elasticsearch查询文档--常见API篇(附详细代码和案例图文)

精确查询

精确查询常见的有term查询和range查询,可以使用QueryBuilders工具类来实现。
例如基于词条查询和范围查询的DSL语句如下:

# 词条查询
GET /hotel/_search
{
  "query": {
    "term": {
      "city": "上海"
    }
  }
}
# 范围查询
GET /hotel/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 100,
        "lte": 200
      }
    }
  }
}

使用QueryBuilders工具类来实现的代码如下:

request.source().query(QueryBuilders.termQuery("city","上海"));
request.source().query(QueryBuilders.rangeQuery("price").gt(150).lt(200));

复合查询

例如使用term查询和range查询组合到一起来进行组合查询,在DSL中的语句为:

GET /hotel/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "city": {
              "value": "上海"
            }
          }
        }
      ],
      "filter": [
        {
          "range": {
            "price": {
              "gte": 150,
              "lte": 200
            }
          }
        }
      ]
    }
  }
}

将其转化为Java语言中的代码,如下:

//准备DSL语句
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must(QueryBuilders.termQuery("city","上海"));
boolQuery.filter(QueryBuilders.rangeQuery("price").gt(150).lt(200));
request.source().query(boolQuery);

执行代码得到以下结果:
Elasticsearch查询文档--常见API篇(附详细代码和案例图文)

排序和分页

对搜索的结果进行排序和分页,是与query同级的参数,由以下的DSL语句可以看出:

GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "from": 0,
  "size": 5
  , "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ]
}

上面DSL对于的Java代码如下,query和sort等为同级结构:

//准备DSL语句
request.source().query(QueryBuilders.matchAllQuery());
request.source().from(0).size(5);//查询结果显示五条数据
request.source().sort("price", SortOrder.ASC);//按照升序的顺序排列

执行结果如下:

Elasticsearch查询文档--常见API篇(附详细代码和案例图文)

高亮显示

高亮API包括请求DSL构建和结果解析两部分,DSL语句如下:

GET /hotel/_search
{
  "query": {
    "match": {
      "all": "如家"
    }
  },
  "highlight": {
    "fields": {
      "name": {
        "require_field_match": "false"
      }
    }
  }
}

网页端高亮显示结果如下图所示:
Elasticsearch查询文档--常见API篇(附详细代码和案例图文)

Java代码如下:

    @Test
    void testHighLighter() throws IOException {
        //准备request
        SearchRequest request = new SearchRequest("hotel");
        //准备DSL语句
        request.source().query(QueryBuilders.matchQuery("name","如家"));
        request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));
        //发送请求
        SearchResponse response = client.search(request, RequestOptions.DEFAULT);
        //解析响应结果,对于网页端的hits,参考json解析结果由外到内逐层解析
        handleResponse(response);
    }

     private void handleResponse(SearchResponse response) {
        //解析响应结果,对于网页端的hits,参考json解析结果由外到内逐层解析
        SearchHits searchHits = response.getHits();
        //获取命中的总条数
        TotalHits total = searchHits.getTotalHits();
        //打印搜索出多少条数据
        System.out.println("共搜索出" + total + "条数据");
        //搜索出的文档数组
        SearchHit[] hits = searchHits.getHits();
        //遍历文档数组
        for (SearchHit hit : hits) {
            //获取文档source
            String json = hit.getSourceAsString();
            //反序列为HotelDoc对象
            HotelDoc hotelDoc = JSON.parseObject(json, HotelDoc.class);
            //获取高亮结果
            Map<String, HighlightField> highlightFields = hit.getHighlightFields();
            //如果高亮结果不为空才设置值
            if(!CollectionUtils.isEmpty(highlightFields)){
                //根据字段名称获取高亮结果
                HighlightField highlightField = highlightFields.get("name");
                if(highlightField!=null){
                    //获取高亮值
                    String name = highlightField.getFragments()[0].string();
                    //覆盖非高亮结果
                    hotelDoc.setName(name);
                }
            }
            //打印输出
            System.out.println(hotelDoc);
        }
    }

Elasticsearch查询文档--常见API篇(附详细代码和案例图文)

写了这么多API的使用”,感觉大佬如果看完的话会稍微有些累哈哈。
好了,本篇文章就先分享到这里了,后续会继续分享其他方面的知识,感谢大佬认真读完支持咯~
Elasticsearch查询文档--常见API篇(附详细代码和案例图文)

为了感谢朋友们的支持,接下来为粉丝朋友们送 些小福利哦(送书活动)~~

图书推荐

Java 诞生 27 年来,这本享誉全球的 Java 经典著作《Core Java》一路伴随着 Java 的成长,得到了百万 Java 开发者的青睐,几乎出现在每个“学Java要看什么书”类似的书单里,影响了几代技术人。

27年间,每当 Java 有新的 LTR 版本发布,这本书都会随之更新,这次也不例外。现在,针对 Java 17 新特性的《Java核心技术》第 12 版*中文版(卷1)终于上市了!

《Java核心技术》第 12 版涵盖了 Java 17 的最新特性,相应调整了部分内容结构,同时延续之前版本的优良传统,利用清晰明了的示例加以解释,并提供了全部示例代码,以便读者学习和灵活应用。它将续写从前的辉煌,使开发者能及时跟上 Java 前进的步伐。

我们寻找了50位曾经看着《Java核心技术》这本书成长起来的KOL推荐本书!大家的寄语全部收录在第12版新书中!

Elasticsearch查询文档--常见API篇(附详细代码和案例图文)

这本书究竟是怎样的一本书,得到众多开发者的一致推荐呢?

Elasticsearch查询文档--常见API篇(附详细代码和案例图文)

●《Java核心技术》并非市面那些零基础速成的书,很好地避免了开发基础书容易犯的“大而泛”的问题,尽管内容繁多,但对知识点的介绍并非泛泛而过。通过周密组织,从Java繁杂的内容中整理出一条清晰的主线,构成一个完整的知识体系。

●整本书不仅让你深入了解设计和实现Java应用涉及的所有基础知识和Java特性,还会帮助你掌握开发Java程序所需的全部基本技能。

●作者凯.霍斯特曼是Java技术坚定的倡导者,至今仍常年在国际上的各类计算机峰会上进行技术分享。在位于硅谷中心的圣何塞州立大学教学30余年,为硅谷的顶尖科技公司培养了大量计算机专业人才。非常熟知大厂要什么!所以他的书也是非常有针对性。

●为帮助大家更轻松地学习Java,作者还亲自录制了配套视频讲解课程,视频配有中文配音+中文字幕,与纸书涵盖内容基本一致,适配Java SE8以后的版本。纸书+视频搭配学习,学习Java更轻松。(B站搜索“Java核心技术站”直达)。

相信在学习Java的道路上有了《Java核心技术》这本书的辅助,你一定可以做到事半功倍。

评论区留言:人生苦短,我用Java(评论最多五条抽取四名幸运观众)。

京东自营购买链接:点击跳转

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论😁
希望能和诸佬们一起努力,今后我们顶峰相见🍻
再次感谢各位小伙伴儿们的支持🤞

Elasticsearch查询文档--常见API篇(附详细代码和案例图文)文章来源地址https://www.toymoban.com/news/detail-410177.html

到了这里,关于Elasticsearch查询文档--常见API篇(附详细代码和案例图文)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Elasticsearch之聚合查询介绍与使用(附RestAPI代码案例)

    前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将介绍Elasticsearch搜索引擎之聚合查询的介绍与使用,这块内容不作为面试中的重点。 如果文章有什么需要改进的地方还请大佬不吝赐教 👏👏。 小威在此先感谢各位大佬啦~~🤞🤞 🏠个人主页:小威

    2023年04月13日
    浏览(43)
  • ElasticSearch篇——Restful风格详解以及常见的命令,涵盖_cat命令查看ES默认数据、索引和文档的增删改查以及复杂搜索,超详细、超全面、超细节!

    一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要是用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更加简洁,更有层次,更易于实现缓存等机制。 一、基本Rest命令说明 1、命令 对应的就是head可视化界面的下面的信息(换句话

    2024年01月16日
    浏览(43)
  • 【elasticsearch】elasticsearch—API文档

    elasticsearch—API文档 创建文档 查询文档 修改文档 再次查询文档: 删除文档 批量修改文档 批量删除文档

    2024年02月06日
    浏览(31)
  • 【ElasticSearch教程】--- Elasticsearch文档多条件查询(十二)

    查询的body体的查询不能在使用 match 了,而需要使用, bool 然后要多个条件同时成立,接下来要填入 must ,多个条件用数组。body样例如下: 以上看起来就相当于是单条件要一样的效果。然后我们再加一个条件。如下: 返回结果: 返回结果就同时满足了 \\\"category\\\":\\\"床上用

    2024年02月11日
    浏览(50)
  • Elasticsearch文档查询详解

    如果文档中被匹配的字段包含中文则会进行模糊搜索,如果只有英文则会精确搜索,举例说明: 字段名 文档1 文档2 文档3 name java java123 java张三 如果name匹配java的话可以匹配到java、java张三但是匹配不到java123。 查询索引中tags中包含男、技术的文档,会检索出包含男关

    2024年02月08日
    浏览(40)
  • ElasticSearch-文档查询

    目录 一、查询某个索引下的全部文档 二、根据查询条件查询文档 三、分页查询 四、查询指定返回的字段 五、排序 六、多条件查询 七、范围查询 八、全文检索与完全匹 语法: 例子: 结果: 语法如下,使用query,match查询条件。  例子: 结果:   语法:from和size, from表示

    2024年02月15日
    浏览(32)
  • 【Elasticsearch】DSL查询文档

    目录 1.DSL查询文档 1.1.DSL查询分类 1.2.全文检索查询 1.2.1.使用场景 1.2.2.基本语法 1.2.3.示例 1.2.4.总结 1.3.精准查询 1.3.1.term查询 1.3.2.range查询 1.3.3.总结 1.4.地理坐标查询 1.4.1.矩形范围查询 1.4.2.附近查询 1.5.复合查询 1.5.1.相关性算分 1.5.2.算分函数查询 1)语法说明 2)示例 3)小

    2024年02月16日
    浏览(40)
  • Elasticsearch深入学习 (四) 文档查询

    一、创建索引 创建索引,并指定title字段的类型为keyword,用于精确查询 PUT /my_index {   \\\"settings\\\": {     \\\"number_of_shards\\\": 3,     \\\"number_of_replicas\\\": 2   },   \\\"mappings\\\": {     \\\"properties\\\": {       \\\"title\\\": { \\\"type\\\": \\\"keyword\\\" },       \\\"description\\\": { \\\"type\\\": \\\"text\\\" },       \\\"timestamp\\\": { \\\"type\\\": \\\"date\\\" }  

    2024年02月17日
    浏览(34)
  • elasticsearch文档Get API

    执行结果如下: 通过阅读前面的文章,相信大家对这个执行结果应该很熟悉了,这里的执行结果中有  _index 、  _type 、  _id 、  _version 等我们常见的信息,也有found字段表示查询的数据是否存在,  _source 字段则表示查询到的数据。 开发者也可以使用HEAD请求查看一个文档是

    2024年04月11日
    浏览(28)
  • 查询交强险投保日期API接口文档

      一、接口介绍 交强险是指在我国机动车保险中的强制保险,也是车辆所有人在机动车投保时必须购买的一项保险。查询交强险投保日期API接口旨在提供一种简便快捷地查询车辆交强险相关信息的方式,包括投保日期、到期日期等。这个接口可以帮助用户及时了解车辆交强险

    2024年02月19日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包