我有一个SQL查询,它连接3-4个表上的操作来获取数据。现在我们转向elasticsearch,以获得更好的性能。如何使用elasticsearch复制相同的联接查询?我读过关于父/子文档的文章,但是我的数据没有任何严格的父/子类型的数据。
发布于 2015-12-27 05:42:57
Elasticsearch不支持联接,这是NoSQL技术的全部目的。有一些方法可以使用父母/子女关系 (正如您已经注意到的那样)、嵌套对象以及使用特殊的术语查找优化来在数据之间创建一些关系,但这就是其中的一部分。
但是,为了最大限度地利用Elasticsearch,主要思想是尽可能多地去甲基化您的数据,并存储独立的文档。这意味着您可以接受一个单一的文档,它包含它所需的所有信息。您不关心数据将被复制的事实。
例如,假设SQL数据库中有以下JOIN查询,用于检索所有人员及其地址、城市和国家(即4个表):
SELECT p.first_name, p.last_name,
a.street_name, a.street_num,
c.name, c2.name
FROM person p
JOIN address a ON a.id = p.addr_id
JOIN city c ON c.id = p.city_id
JOIN country c2 ON c2.id = p.country_id在Elasticsearch中,您将创建一个包含上述查询返回的字段的文档,即
{
"first_name": "John",
"last_name": "Doe",
"street_num": 34,
"street_name": "Main Street",
"city": "San Francisco",
"country": "United States"
}因此,看到这一点的一个方法是,在Elasticsearch中,您将存储在关系数据库中运行查询所得到的相同(或非常相似)字段集。
从RDBMS到Elasticsearch这一步是一个范式的转变。如果您要采取这一步骤,您需要考虑不同的数据。
https://stackoverflow.com/questions/34477816
复制相似问题