如何保持 SQL 数据和 Elasticsearch 同步,以及从中进行搜索?
How to keep SQL data and Elasticsearch in-sync, and which to search from?
我看到提到了两个解决方案,想知道大多数人是怎么做的。
使用logstash
编写您的应用程序以与 SQL 一起写入 Elasticsearch。例如,
public saveRecord() {
saveToElasticsearch();
saveToSQL();
}
另外一个问题是如何处理实际搜索实体?您只使用 Elasticsearch 吗?
如果不是,我会假设您根据关键字从 Elasticsearch 中获取并使用返回的 ID 来过滤您的 SQL 查询。那么我的问题是,您如何处理分页?例如,假设您只想要 50 到 100 的结果。首先您查询 returns 50-100 的 Elasticsearch。然后 SQL 查询将其减少到 20 个结果——其他 30 个结果在下一个 Elasticsearch 查询中(例如 100 - 150)。你一直来回走动吗?
关于你的第一个问题
关于第二个问题,如果您打算使用 elasticsearch 作为搜索层,那么最好对所有 searchable/filterable 字段都这样做。正如您所描述的,替代方案很快就会变得非常混乱。将 elasticsearch 用于所有 searches/filters 甚至聚合(如果它适合您的需要)。使用 sql 数据库作为你的真实观点,并从那里获取完整的有效负载。
一般来说,如果您需要分页,那么您的搜索最好放在一个地方,否则会变得很丑陋。
我看到提到了两个解决方案,想知道大多数人是怎么做的。
使用logstash
编写您的应用程序以与 SQL 一起写入 Elasticsearch。例如,
public saveRecord() {
saveToElasticsearch();
saveToSQL();
}
另外一个问题是如何处理实际搜索实体?您只使用 Elasticsearch 吗?
如果不是,我会假设您根据关键字从 Elasticsearch 中获取并使用返回的 ID 来过滤您的 SQL 查询。那么我的问题是,您如何处理分页?例如,假设您只想要 50 到 100 的结果。首先您查询 returns 50-100 的 Elasticsearch。然后 SQL 查询将其减少到 20 个结果——其他 30 个结果在下一个 Elasticsearch 查询中(例如 100 - 150)。你一直来回走动吗?
关于你的第一个问题
关于第二个问题,如果您打算使用 elasticsearch 作为搜索层,那么最好对所有 searchable/filterable 字段都这样做。正如您所描述的,替代方案很快就会变得非常混乱。将 elasticsearch 用于所有 searches/filters 甚至聚合(如果它适合您的需要)。使用 sql 数据库作为你的真实观点,并从那里获取完整的有效负载。
一般来说,如果您需要分页,那么您的搜索最好放在一个地方,否则会变得很丑陋。