一尘不染

Elasticsearch中的多对多关系

elasticsearch

我知道在Elasticsearch中,我们可以在文档之间建立子/父关系

然后,在建立索引时,我可以传递父代ID,以便将子文档和父文档链接起来:

$ curl -XPUT localhost:9200/blogs/blog_tag/1122?parent=1111 -d '{    "tag" : "something"}'

无论如何,在Elasticsearch中建立多对多关系的模型吗?

数据驻留在具有以下架构的MySQL数据库中:

account
========
id
name
some_property

group
========
id
name
description

account_group
=============
account_id
group_id
primary_group //This is 1 or 0 depending on whether the group is the primary group for that account.

当前这是我的映射account(请原谅数组表示法,我在PHP中使用Elastica与我的Elasticsearch服务器通信):

**Mapping for account**

'name' => array(
    'type' => 'string'),

'some_property' => array(
    'type' => 'string'),

'groups' => array(
   'properties' => array(
    'id'      => array('type' => 'integer'),
    'primary' => array('type' => 'boolean')
    )
),

**Mapping for group**

'name' => array(
        'type' => 'string'),

'description'=> array(
        'type' => 'string')

这种方法的问题在于,如果从索引中删除了一个组,我将需要遍历每个帐户并从每个帐户中删除组ID。这对我来说似乎效率不高。我还假定在使用elasticsearch的子/父关系时,这不会成为问题。

无论如何,在Elasticsearch中是否可以建立多对多关系的模型?


阅读 899

收藏
2020-06-22

共1个答案

一尘不染

无法为多对多关系建模。

唯一的方法是像上面一样,将每个组的ID存储在每个帐户中。

Elasticsearch非常高效,因此通常情况下,重新索引是可以接受的解决方案。另外,elasticsearch具有文档的概念,并且不是关系存储系统,因此可能永远不会实现多对多关系。

2020-06-22