【发布时间】:2020-05-10 17:48:45
【问题描述】:
假设我将故事文档存储在 Elasticsearch 中,例如
{
story_id: 1,
title: "Hello World",
content: "Foo. Bar."
likes: 2222
}
当客户端(前端)搜索时,他们应该可以选择喜欢(或删除他们喜欢的)任何搜索结果,但也应该表明他们是否已经喜欢每个结果。
将这些信息提供给客户的好方法是什么?
执行数据库查询以获取用户喜欢的所有故事并将其保存在客户端的本地存储中。当检索到搜索结果时,将用户喜欢的故事映射到客户端上检索到的搜索结果。当用户喜欢故事时,这将增加更新本地存储和 API 的复杂性。此外,用户喜欢的故事数量可能会非常多。
-
在文档本身中保留一个喜欢故事的用户列表,并在搜索时检查用户是否在列表中。这会炸毁搜索索引的大小吗?
{ ... likes: [ 'foo_user', 'bar_user', ... ] } 在 API 中,搜索后,执行数据库查询以确定用户已经喜欢搜索响应中的哪些故事,并将此信息映射到搜索结果,然后返回 API 响应。这可能会减慢搜索速度,因为需要额外的数据库查询,但可能无关紧要?
【问题讨论】:
-
我会选择选项 3,但您需要对其进行基准测试。
标签: api rest elasticsearch search datastore