es的nested查询

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

一、一层嵌套
mapping:

PUT /nested_example
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "books": {
        "type": "nested",
        "properties": {
          "title": {
            "type": "text"
          },
          "author": {
            "type": "text"
          }
        }
      }
    }
  }
}

导入数据到索引:


POST /nested_example/_bulk
{ "index" : { "_id" : "1" } }
{ "name" : "John Doe", "books" : [ { "title" : "Book 1", "author" : "Author 1" }, { "title" : "Book 2", "author" : "Author 2" } ] }
{ "index" : { "_id" : "2" } }
{ "name" : "Jane Smith", "books" : [ { "title" : "Book 3", "author" : "Author 3" }, { "title" : "Book 4", "author" : "Author 4" } ] }

使用DevTools执行多层嵌套查询

 POST /nested_example/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "Tom"
          }
        },
        {
          "nested": {
            "path": "books",
            "query": {
              "match": {
                "books.author": "Jerry"
              }
            }
          }
        }
      ]
    }
  }
}

Java查询语句:

 import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.NestedQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;

public class ElasticsearchNestedQueryExample {
    public static void main(String[] args) throws Exception {
        RestHighLevelClient client = new RestHighLevelClient();

        SearchRequest searchRequest = new SearchRequest("nested_example");
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

        // 构建bool查询
        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();

        // 添加must子句用于匹配name字段为"Tom"
        MatchQueryBuilder nameQuery = QueryBuilders.matchQuery("name", "Tom");
        boolQuery.must(nameQuery);

        // 构建嵌套查询
        NestedQueryBuilder nestedQuery = QueryBuilders.nestedQuery(
            "books",
            QueryBuilders.matchQuery("books.author", "Jerry"),
            ScoreMode.None // 可选的分数模式
        );
        boolQuery.must(nestedQuery);

        sourceBuilder.query(boolQuery);
        searchRequest.source(sourceBuilder);

        // 执行查询
        client.search(searchRequest, RequestOptions.DEFAULT);

        // 关闭客户端连接
        client.close();
    }
}


二、多层嵌套
mapping:

PUT /nested_example
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "books": {
        "type": "nested",
        "properties": {
          "title": {
            "type": "text"
          },
          "authors": {
            "type": "nested",
            "properties": {
              "author_name": {
                "type": "text"
              }
            }
          }
        }
      }
    }
  }
}

导入数据到索引

POST /nested_example/_bulk
{ "index" : { "_id" : "1" } }
{ "name" : "John Doe", "books" : [ { "title" : "Book 1", "authors" : [ { "author_name" : "Author 1" }, { "author_name" : "Author 2" } ] } ] }
{ "index" : { "_id" : "2" } }
{ "name" : "Jane Smith", "books" : [ { "title" : "Book 2", "authors" : [ { "author_name" : "Author 2" }, { "author_name" : "Author 3" } ] } ] }

使用DevTools执行多层嵌套查询

POST /nested_example/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "Tom"
          }
        },
        {
          "nested": {
            "path": "books",
            "query": {
              "nested": {
                "path": "books.authors",
                "query": {
                  "match": {
                    "books.authors.author_name": "Author 2"
                  }
                }
              }
            }
          }
        }
      ]
    }
  }
}

Java查询语句:文章来源地址https://www.toymoban.com/news/detail-771219.html

import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.NestedQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;

public class ElasticsearchNestedNestedQueryExample {
    public static void main(String[] args) throws Exception {
        RestHighLevelClient client = new RestHighLevelClient();

        SearchRequest searchRequest = new SearchRequest("nested_example");
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

        // 构建bool查询
        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();

        // 添加must子句用于匹配name字段为"Tom"
        MatchQueryBuilder nameQuery = QueryBuilders.matchQuery("name", "Tom");
        boolQuery.must(nameQuery);

        // 构建外层nested查询
        NestedQueryBuilder outerNestedQuery = QueryBuilders.nestedQuery(
            "books",
            // 构建内层nested查询
            QueryBuilders.nestedQuery(
                "books.authors",
                QueryBuilders.matchQuery("books.authors.author_name", "Author 2"),
                ScoreMode.None // 可选的分数模式
            ),
            ScoreMode.None // 可选的分数模式
        );

        boolQuery.must(outerNestedQuery);

        sourceBuilder.query(boolQuery);
        searchRequest.source(sourceBuilder);

        // 执行查询
        client.search(searchRequest, RequestOptions.DEFAULT);

        // 关闭客户端连接
        client.close();
    }
}

到了这里,关于es的nested查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • ElasticSearch进阶:多种查询操作,各种ES查询以及在Java中的实现

    目录 前言 1 词条查询 1.1 等值查询-term 1.2 多值查询-terms 1.3 范围查询-range 1.4 前缀查询-prefix 1.5 通配符查询-wildcard 2 复合查询 2.1 布尔查询 2.2 Filter查询 3 聚合查询 3.1 最值、平均值、求和 3.2 去重查询 3.3 分组聚合 3.3.1 单条件分组 3.3.2 多条件分组 3.4 过滤聚合 ElasticSearch 第一篇

    2024年02月02日
    浏览(53)
  • ElasticSearch第五讲 ES nested嵌套文档与父子文档处理

    在ES中,处理实体之间的关系并不像关系型存储那样明显。在关系数据库中的黄金准则 - 数据规范化,在ES中并不适用。在处理关联关系,嵌套对象和父子关联关系中,我们会讨论几种可行方案的优点和缺点。 紧接着在为可扩展性而设计中,我们会讨论ES提供的一些用来快速灵

    2024年02月02日
    浏览(44)
  • java使用ElasticSearch的scroll查询,高效的解决es查询数量的限制。

    (1)首先我们要明白es的查询机制:ES的搜索是分2个阶段进行的,即 Query阶段和Fetch阶段 。 Query阶段 比较轻量级,通过查询倒排索引,获取满足查询结果的文档ID列表。 Fetch阶段 比较重,需要将每个分片的查询结果取回,在协调结点进行 全局 排序。 通过From+size这种方式分批

    2024年02月03日
    浏览(84)
  • 【ElasticSearch】ES自动补全查询与Java接口实现

    自动补全就是当用户在搜索框输入字符时,我们应该提示出与该字符有关的搜索项。 要实现根据字母做补全,就必须对文档按照拼音分词。GitHub上有相关插件,地址:https://github.com/medcl/elasticsearch-analysis-pinyin,下载和ES对应的版本。 安装步骤: 解压 上传到虚拟机中,elasti

    2024年02月15日
    浏览(45)
  • Elasticsearch实战(二十四)---ES数据建模一对多模型Nested结构

    我们如何把Mysql的模型合理的在ES中去实现? 就需要你对要存储的数据足够的了解,及对应用场景足够的深入分析,才能建立一个合适的模型,便于你后期扩展 一对一 模型 一对多 模型 多对多 模型 上一篇,我们介绍了 一对多模型,采用Object对象存储的巨大缺陷,本篇文章,我们

    2024年02月14日
    浏览(47)
  • Elasticsearch多层嵌套nested查询和多条件聚合aggregations

     当在aggregations中使用嵌套多条件,需要用bool包起来,如果直接在filters[]里写,将会分多个桶,分别按单个条件统计;  部分片段截取: 当需要将多层嵌套nested用多个条件AND起来时: 全部片段: Elasticsearch 多层嵌套nested 多条件聚合aggregations

    2024年02月16日
    浏览(47)
  • Elasticsearch“滚动查询“(Scrolling)的机制的与Java使用ES Client 调用滚动查询

    ES在进行普通的查询时,默认只会查询出来10条数据。我们通过设置es中的size可以将最终的查询结果从10增加到10000。如果需要查询数据量大于es的翻页限制或者需要将es的数据进行导出又当如何? Elasticsearch提供了一种称为 \\\"滚动查询\\\"(Scrolling) 的机制,用于处理大型数据集的

    2024年02月11日
    浏览(47)
  • Elasticsearch 基于 array 结构 的nested类型的索引的聚合查询

    这几天在做es的聚合查询,对那种一对多的产品数据查询的时候遇到了一些问题,做一下记录 针对每个产品名称[ product_name ]进行分组,并对预算[ budget ]求和 产品名称 预算 电视机 4000 手机 851 相机 5000 扑克牌 2 es查询语句==简化版 es查询的结果==简化版 注意电视机的doc_count为

    2024年02月16日
    浏览(59)
  • ElasticSearch进阶:一文全览各种ES查询在Java中的实现

    ElasticSearch进阶:一文全览各种ES查询在Java中的实现 es基本语句详解 查询语句详解 ElasticSearch第一篇: ElasticSearch基础:从倒排索引说起,快速认知ES 完整项目已上传至:ElasticSearch Demo 项目,该项目是关于springboot的集成项目,ElasticSearch部分请关注【elasticSearch-demo】模块。觉得

    2024年02月02日
    浏览(53)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包