原文地址: https://www.elastic.co/guide/cn/elasticsearch/guide/current/denormalization.html, 版权归 www.elastic.co 所有
英文版地址: https://www.elastic.co/guide/en/elasticsearch/guide/current/denormalization.html
英文版地址: https://www.elastic.co/guide/en/elasticsearch/guide/current/denormalization.html
请注意:
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
去规范化你的数据 (Denormalizing Your Data)edit
使用 Elasticsearch 得到最好的搜索性能的方法是有目的的通过在索引时进行 去规范化(denormalizing)。对每个文档保持一定数量的冗余副本可以在需要访问时避免进行关联。
如果我们希望能够通过某个用户姓名找到他写的博客文章,可以在博客文档中包含这个用户的姓名:
PUT /my_index/user/1 { "name": "John Smith", "email": "john@smith.com", "dob": "1970/10/24" } PUT /my_index/blogpost/2 { "title": "Relationships", "body": "It's complicated...", "user": { "id": 1, "name": "John Smith" } }
现在,我们通过单次查询就能够通过 relationships
找到用户 John
的博客文章。
GET /my_index/blogpost/_search { "query": { "bool": { "must": [ { "match": { "title": "relationships" }}, { "match": { "user.name": "John" }} ] } } }
数据去规范化的优点是速度快。因为每个文档都包含了所需的所有信息,当这些信息需要在查询进行匹配时,并不需要进行昂贵的联接操作。