在Elasticsearch中使用多对多关系

时间:2014-04-03 10:43:32

标签: elasticsearch many-to-many

目前我们在弹性搜索中执行查询(或更准确地说是设计映射)时遇到问题,这有助于我们对关系问题执行查询,我们没有用非文档解决来自sql的定向思维。

我们希望在不同的Elasticsearch条目之间创建多对多关系。我们需要这个来编辑一次条目并保持所有使用的更新。

为了描述问题,我们将使用以下简单数据模型:

    Broadcast           Content
   ------------        ---------
    Id                  Id
    Day                 Title               
    Contents []         Description

因此我们有两种不同的索引类型,广播和内容。 广播可以具有许多内容,并且单个内容也可以是不同广播的一部分(例如,重复)。

JSON喜欢:

index/broadcasts
    {
        "Id": "B1",
        "Day": "2014-10-15",
        "Contents": [
            "C1",
            "C2"
        ]
    }
    {
        "Id": "B2",
        "Day": "2014-10-16",
        "Contents": [
            "C1",
            "C3"
        ]
    }
index/contents
    {
        "Id": "C1",
        "Title": "Wake up",
        "Description": "Morning show with Jeff Bridges"
    }
    {
        "Id": "C2",
        "Title": "Have a break!",
        "Description": "Everything about Android"
    }
    {
        "Id": "C3",
        "Title": "Late Night Disaster",
        "Description": "Comedy show"
    }

现在我们要重命名'#34;深夜灾难"更确切地说,并使所有参考文献保持最新。

我们怎么能接近这个? ES中是否还有其他选项,比如RavenDB中的包含?

到目前为止,嵌套对象或子父母关系对我们没有帮助。

1 个答案:

答案 0 :(得分:0)

非正规化怎么样?如果我们来自SQL思维模式似乎很难,但是试试看,即使有数百万个文档,LUCENE索引也可以提供帮助,重命名将是一个批处理工作。

[
  {
    "Id": "B1",
    "Day": "2014-10-15",
    "Contents": [
      {
        "Title": "Wake up",
        "Description": "Morning show with Jeff Bridges"
      },
      {
        "Title": "Have a break!",
        "Description": "Everything about Android"
      }
    ]
  },
  {
    "Id": "B2",
    "Day": "2014-10-16",
    "Contents": [
      {
        "Title": "Wake up",
        "Description": "Morning show with Jeff Bridges"
      },
      {
        "Title": "Late Night Disaster",
        "Description": "Comedy show"
      }
    ]
  }
]