使用Elasicsearch的多嵌套树

时间:2016-03-08 16:33:23

标签: elasticsearch

我在MySQL-DB中有一些产品和类别。

每种产品都列在n类中。 所有类别都列在树中,因此每个类别都有一个parentCat,直到第一级。

现在我正在寻找最好的弹性指数结构来查询我的产品并按类别和子类别过滤它们。

我正在搜索网络上的某些日子,但无法找到一个好的解决方案。也许这里有人可以帮助我或提示。

提前感谢!

1 个答案:

答案 0 :(得分:0)

我建议汇总一个文档,elasticsearch是一个面向NoSql的文档。 你可以有这样的结构:

curl -XPOST "http://192.168.99.100:9200/shop/products" -d'
{
   "name": "White shoes",
   "sizes": [
      40,
      41,
      42
   ],
   "info": "bla bla bla",
   "categories": [
      {
         "name": "Social Shoes",
         "parentCat": {
            "name": "Social"
         }
      },
      {
         "name": "Winter Shoes",
         "parentCat": {
            "name": "Winter 2016"
         }
      }
   ]
}'

使用此结构的示例查询,让我们知道我需要一个与父类别称为Social的产品,称为Social Shoes的类别

curl -XPOST "http://192.168.99.100:9200/shop/products/_search" -d'
{
    "query": {
       "nested": {
          "path": "categories",
          "query": {
              "bool": {
                  "must": [
                     {
                         "match": {
                            "categories.id": 1
                         }
                     },
                     {
                         "nested": {
                            "path": "categories.parentCat",
                            "query": {
                                "bool": {
                                    "must": [
                                       {
                                           "match": {
                                              "categories.parentCat.id": 1
                                           }
                                       }
                                    ]
                                }
                            }
                         }
                     }
                  ]
              }
          }
       }
    }
}'