从弹性搜索和MySQL连接数据以进行分页的最佳方法是什么?

时间:2019-02-24 12:02:32

标签: mysql elasticsearch pagination

我正在开发一个在弹性搜索中具有用户数据和在MySQL中具有用户汽车数据的应用程序。

要求:以下特定状态的用户汽车的分页视图

查看

:纽约

用户ID 1 | UserCar ID 1

用户ID 1 | UserCar ID 2

用户ID 3 | UserCar ID 10

用户ID 4 | UserCar ID 15

单个用户可以拥有任意数量的汽车。

我想到了以下两种方法。

1)从Elastic搜索中获取给定状态的所有用户,然后从MySQL中获取这些用户的所有汽车,然后根据页码发送拆分数据。

2)从弹性搜索中逐个获取用户,然后从MySQL中获取该用户的汽车,直到您到达该页面的记录数为止一直保持工作。

我认为上述两种方法均无效。最好的方法是什么?

2 个答案:

答案 0 :(得分:0)

我将从ES获得用户页面(仅是所需的单个页面),然后使用DB中所需的汽车信息(仅是相关汽车)来丰富它。

为了加快汽车充实的第二阶段,我建议您有一个缓存-内存中的完整数据库还是LRU。

因此,您可以从右页的ES中获取信息,并丰富对相关汽车的记忆。这应该是有效的。

答案 1 :(得分:0)

如果要在浏览器上创建用户汽车表,则使用限制和偏移量将这些汽车数据与MYSQL中的用户汽车关系表合并。在这里,我假设您正在使用服务器端数据表。

然后从ES获取特定用户的数据,因为从ES获取数据的速度更快。接下来,从客户端开始,您需要使用JS追加或更新表列。

ES查询应如下所示:

GET /users/_search
{
    "query" : {
        "constant_score" : {
            "filter" : {
                "terms" : { 
                    "id" : [1, 2, 3]
                }
            }
        }
    }
}