在 elasticsearch 中使用两个独立的关系索引是否有意义?

Using two separate relational indexes in elasticsearch is sense or not?

我有两个关系 mysql 表,我需要将这些数据存储到 elasticsearch。 我是这样存储的,我想问问你有没有最好的方法:


POST categories/_doc
{
   "id" : 1,
   "name" : "Phones"
}

POST categories/_doc
{
   "id" : 2,
   "name" : "TV"
}

PUT products
{
  "mappings": {
    "properties": {
      "attributes": {
        "type": "nested"
      }
    }
  }
}

POST products/_doc
{
   "id" : 3
   "category_id" : 1
   "name" : "IPhone 5S",
   "attributes" : [
    {
      "color" : "red",
      "stock" : 4
    },
    {
      "color" : "blue",
      "stock" : 2
    }
   ]
}

POST products/_doc
{
   "id" : 5
   "category_id" : 2
   "name" : "Samsung TV",
   "attributes" : [
    {
      "color" : "red",
      "stock" : 2
    },
    {
      "color" : "yellow",
      "stock" : 4
    }
   ]
}

我使用两个查询进行搜索:

我首先搜索类别索引,然后将类别 ID 值发送到产品索引

GET products/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "nested": {
            "path": "attributes",
            "query": {
              "terms": {
                "attributes.color": [
                  "red",
                  "blue"
                ]
              }
            },
            "inner_hits": {}
          }
        },
        {
          "term": {
            "category_id": 2
          }
        }
      ]
    }
  }
}

你能分享一下你对这个话题的看法吗?

提前致谢

这样做不是一个好的做法,因为您将很难在应用程序上进行排序和分页。在 Elasticsearch 中,出于性能原因将数据扁平化并将其存储在一个索引中非常重要,如果您确实将内容分开,则可以将它们放在多个索引中。还要记住以下几点:

  1. Elasticsearch 不是关系型数据库。您将无法像以前加入表那样加入索引
  2. 反规范化并不自然,但却是 Elasticsearch 应用程序效率的关键。
  3. 尽早考虑数据映射将使您 应用飞行多年。