当前位置: 首页 > 知识库问答 >
问题:

弹性搜索-匹配文档中的所有嵌套变体

潘凯
2023-03-14

我有几个产品的变化,像下面的一个

{
    "title": "100% Cotton Unstitched Suit For Men",
    "slug": "100-cotton-unstitched-suit-for-men",
    "price": 200,
    "sale_price": 0,
    "vendor_id": 32,
    "featured": 0,
    "viewed": 20,
    "stock": 4,
    "sku": "XXX-B",
    "rating": 0,
    "active": 1,
    "vendor_name": "vendor_name",
    "category": [
        "men_fashion",
        "traditional_clothing",
        "unstitched_fabric"
    ],
    "image": "imagename.jpg",
    "variations": [
        {
            "variation_id": "34",
            "stock": 5,
            "price": 200,
            "variation_image": "",
            "sku": "XXX-C",
            "size": "m",
            "color": "red"
        },
        {
            "variation_id": "35",
            "stock": 5,
            "price": 200,
            "variation_image": "",
            "sku": "XXX-D",
            "size": "l",
            "color": "red"
        }
    ]
}

我正在寻找一个具有以下所有参数的查询

  1. 获取某个类别中的所有产品
  2. 获取所有黑色的产品
  3. 获取尺寸l和M

我当前的查询:

{
    "size": 15,
    "from": 0,
    "query": {
        "filtered": {
            "filter": {
                "bool": {
                    "must": [
                        {
                            "match": {
                                "category": "women_fashion"
                            }
                        },
                        {
                            "nested": {
                                "path": "variations",
                                "query": {
                                    "bool": {
                                        "must": [{
                                                "match": {
                                                    "variations.color": "red"
                                                }
                                            },
                                            {
                                                "match": {
                                                    "variations.size": "l"
                                                }
                                            },
                                            {
                                                "match": {
                                                    "variations.size": "m"
                                                }
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    ]
                }
            }
        }
    }
}

它的工作很好,如果我只搜索1个大小。但是一旦我搜索了2个尺寸,它就不会给出任何记录。我的猜测是,它在每个嵌套变体中寻找所有3个参数,显然它找不到。如何修改要搜索的查询

    null

我的第二个问题:

{
    "size": 15,
    "from": 0,
    "query": {
        "filtered": {
            "filter": {
                "bool": {
                    "must": [
                        {
                            "match": {
                                "category": "women_fashion"
                            }
                        },
                        {
                            "nested": {
                                "path": "variations",
                                "query": {
                                    "bool":{
                                        "filter": [
                                            {
                                                "term": {
                                                    "variations.color": "red"
                                                }
                                            },
                                            {
                                                "term": {
                                                    "variations.size": "l"
                                                }
                                            }

                                        ]
                                    }
                                }
                            }
                        }
                    ]
                }
            }
        }
    }
}

共有1个答案

暨宸
2023-03-14

您可以将大小变化放入它自己的子句中,以便至少有一个大小匹配

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "match": {
                "category": "women_fashion"
              }
            },
            {
              "nested": {
                "path": "variations",
                "query": {
                  "bool": {
                    "must": [
                      {
                        "match": {
                          "variations.color": "red"
                        }
                      },
                      {
                        "query": {
                          "bool": {
                            "should": [
                              {
                                "match": {
                                  "variations.size": "l"
                                }
                              },
                              {
                                "match": {
                                  "variations.size": "m"
                                }
                              }
                            ]
                          }
                        }
                      }
                    ]
                  }
                }
              }
            }
          ]
        }
      }
    }
  }
}
 类似资料:
  • 基本问题如下:有没有一种方便的方法可以为嵌套查询的所有字段指定多字段匹配?对于普通查询有效。这在嵌套查询中不起作用,可能是因为嵌套对象没有_all? 下面是更详细的问题: 我有一个名为“Parent”的嵌套文档,如下所示: 这是我用于制作儿童嵌套对象的映射: 这是一个查询,我想使用所有子字段的匹配来选择几个术语查询,以及一个术语查询: 上述查询不起作用,因为我无法为嵌套对象选择多匹配查询中的所有字

  • 尝试排除其中一个子文档与查询不匹配的顶级文档。 对于下面的示例,我试图排除其中一个嵌套作业具有并且与匹配的所有文档。但是,由于其中一个嵌套作业文档与和公司匹配,因此返回此文档。我使用的是一个嵌套查询,其中公司名称必须匹配,并且过滤器的当前值为false。我如何才能使以下文件不被退回?

  • 我正在尝试使用C#使用Nest进行匹配查询。Match查询不会返回任何结果,因为生成的JSON的语法似乎不正确,我确信有一些文档包含此关键字。下面是C代码片段 这将生成以下查询: 但是,当我在Kibana控制台Get\u search中调整同一查询时,该查询返回0个结果 我得到搜索词的结果。请注意,Kibana查询的语法中缺少“第二个查询标记”。 我确实检查了文档,似乎我的语法是正确的https:

  • 如何使用嵌套库在弹性搜索中仅删除嵌套对象而不删除索引。 在上面的映射中,我想删除模型的一个条目,而不删除整个索引。 我尝试使用DeleteByQuery删除,但它会删除整个Make索引。

  • 问题内容: 我如何在mongodb文档中嵌套文档的地方搜索文档。例如,我有一组私人消息。每条私人消息都有两个嵌套文档- 一个代表发送用户,另一个代表接收使用。两个嵌套文档的格式均为- userID:34343,名称:Joe Bloggs 我希望能够搜索用户发送的所有邮件(例如,搜索发件人用户的嵌套文档)。 我正在使用Java驱动程序。我是否需要创建一个代表嵌套文档的DBObject? 谢谢 问题答

  • 如何获得空数组和美国的结果和