【问题标题】:Is it possible to create an ElasticSeach search that only returns matching nested objects not all nested objects?是否可以创建只返回匹配的嵌套对象而不是所有嵌套对象的 ElasticSearch 搜索?
【发布时间】:2019-04-09 22:16:02
【问题描述】:

是否可以构造一个 ElasticSearch 搜索/查询,只返回与嵌套对象搜索条件匹配的嵌套对象,而不是所有嵌套对象?

例如...

{
   "product": "shoe 1",
   "available" [
       {
          "size" : "small",
          "color" : "red",
       },
       {
          "size" : "large",
          "color" : "blue",
       }
   ],
}
{
   "product": "shoe 2",
   "available" [
       {
          "size" : "medium",
          "color" : "red",
       }
       {
          "size" : "xtra large",
          "color" : "green",
       }
   ],
}

.. 搜索鞋子颜色 red 会返回....

{
   "product": "shoe 1",
   "available" [
       {
          "size" : "small",
          "color" : "red",
       },
   ],
}
{
   "product": "shoe 2",
   "available" [
       {
          "size" : "medium",
          "color" : "red",
       }
   ],
}

【问题讨论】:

  • 这个答案应该会有所帮助:stackoverflow.com/questions/32773542/…
  • 该链接中的建议不起作用。我只在“颜色”字段上进行搜索,然后返回每个文档的所有数组元素
  • 发布您的查询,以便我们查看您的尝试。
  • @user2868835 您可以按原样获取查询并对其进行修改以在颜色字段上进行搜索,它将起作用。这里的关键是使用inner_hits 功能。显示您的查询,以便我们了解您是如何完成的。

标签: elasticsearch


【解决方案1】:

你可以试试这样的:

GET /my_index/products/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "available",
            "score_mode": "max", 
            "query": {
              "bool": {
                "must": [
                  {
                    "match": {
                      "available.color": "red"
                    }
                  }
                ]
              }
            }
          }
        }
      ]
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多