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で多対多の関係をモデル化する方法はありますか?