ElasticSearch:按嵌套文档进行复杂过滤

泰穆拉兹

我有以下文档结构:

{
    product_name: "Product1",
    product_id: 1,
    ...,
    articles: [
        {
            article_name: 'Article 101',
            id: 101,
            some_param: 10,
            clients: []
        },
        {
            article_name: 'Article 102',
            id: 102,
            some_param: 11,
            clients: [
                {
                    client_id: 10001,
                    client_name: "some client 1001" 
                }
                ...
            ]
        }
    ]
},

{
    product_name: "Product2",
    product_id: 2,
    ...,
    articles: [
        {
            article_name: 'Article 101',
            id: 101,
            some_param: 10,
            clients: []
        },
        {
            article_name: 'Article 102',
            id: 102,
            some_param: 10,
            clients: [
                {
                    client_id: 10001,
                    client_name: "some client 1001" 
                }
                ...
            ]
        }
    ]
}

仅当某些文章符合 2 个条件(单篇文章应符合两个条件)时,我才需要获取文档(产品):articles.some_param = 10 AND articles.clients.client_id = 10001

所以我只需要获取 ID 为 2 的产品。

我现在正在使用这个查询,这是不正确的(我知道为什么),因为它获取两个文档:

{
   "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "articles.clients.id": 10001
          }
        },
        {
          "terms": {
            "articles.some_param": 10
          }
        }
      ]              
    }
  }
}

我如何编写查询,获取至少有 1 篇符合这两个条件的文章的产品:articles.some_param = 10 AND articles.clients.client_id = 10001

例如,仅获取 ID 为 2 的产品?

SouXin

像这样的东西:

{
 "query": {
  "nested": {
    "path": "articles",
    "query": {
      "bool": {
        "must": [
              {
                 "term": {
                     "articles.some_param": {
                         "value": 10
                       }
                     }
               },
               {
                 "nested": {
                     "path": "articles.clients",
                        "query": {
                          "term": {
                               "articles.clients.id":{ 
                                 "value": 10001
                            }
                         }
                       }
                  }
               }
           ]
        }
      }
    }
   }
 }

更新:尝试将第二个查询包装为 bool。

{
 "query": {
  "nested": {
    "path": "articles",
    "query": {
      "bool": {
        "must": [
              {
                 "term": {
                     "articles.some_param": {
                         "value": 10
                       }
                     }
               },
               {
                 "bool":{
                   "must" : [
                     {
                     "nested": {
                     "path": "articles.clients",
                        "query": {
                          "term": {
                               "articles.clients.id":{ 
                                 "value": 10001
                            }
                         }
                       }
                     }
                    }
                  ]
                 }
               }
           ]
        }
      }
    }
   }
 }

ps 我可能会误认为第二个嵌套查询的路径。就是查不出来。因此,您可以在第二个查询中使用路径。

pps 过滤器不是您需要的查询。它不计算分数

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ElasticSearch按嵌套文档总数过滤

来自分类Dev

从过滤的文档中进行 Elasticsearch

来自分类Dev

ElasticSearch中的复杂嵌套过滤器

来自分类Dev

Elasticsearch按数组字段大小进行过滤

来自分类Dev

Elastic Search按嵌套文档计数过滤

来自分类Dev

如何在ElasticSearch上对嵌套文档使用构面过滤

来自分类Dev

如何在ElasticSearch中聚合过滤的嵌套文档?

来自分类Dev

根据Elasticsearch中文档的键按优先级过滤

来自分类Dev

通过过滤的嵌套文档进行 NEST 弹性排序

来自分类Dev

在iOS文档选择器中按.docx进行过滤

来自分类Dev

根据ElasticSearch中的嵌套子计数对文档进行排序

来自分类Dev

使用Elasticsearch在返回的文档中按字段进行存储

来自分类Dev

ElasticSearch-按日期进行范围过滤不起作用,

来自分类Dev

ElasticSearch-按日期进行范围过滤不起作用,

来自分类Dev

按嵌套字段过滤

来自分类Dev

Elasticsearch过滤嵌套对象

来自分类Dev

按嵌套文档之一中的值对文档进行排序

来自分类Dev

在Elasticsearch中更新过滤的文档

来自分类Dev

使用 Elasticsearch 进行复杂搜索

来自分类Dev

在Elasticsearch中汇总嵌套文档

来自分类Dev

查询文档并根据嵌套字符串列表(即标签)中的特定值进行过滤

来自分类Dev

按多个嵌套属性过滤

来自分类Dev

按嵌套的 populate() 字段过滤

来自分类Dev

Elasticsearch:全文搜索和按对象嵌套数组过滤

来自分类Dev

ElasticSearch:过滤深度嵌套的数据

来自分类Dev

在MongoDB中使用聚合框架按特定的嵌套字段值对文档进行计数

来自分类Dev

ElasticSearch按数组项过滤

来自分类Dev

Elasticsearch按特定令牌过滤

来自分类Dev

Elasticsearch按星期几过滤

Related 相关文章

热门标签

归档