在 elasticsearch 中存储搜索数据的推荐方法是什么

What is the recommended way to store data for search in elasticsearch

假设我在我的应用程序中使用 Elasticsearch 来搜索我附近的餐馆。 我从 Elasticsearch 获取所有排序的餐厅 ID。并使用这些 id,我从 RDB 获取所有数据,如名称、位置、餐厅的热门菜单。

如您所料,从 RDB 获取数据需要一些时间。如果我将应用程序使用的所有数据存储在 Elasticsearch 中,那么我可以使其更快。 但是我想知道在 Elasticsearch 中存储数据的推荐方式是什么以及选择它时要考虑什么。

我觉得有以下几种方式,

  1. 存储仅用于搜索的数据
  2. 存储所有数据以供搜索和显示

谢谢!

这是一个非常有趣但非常常见的问题,通常每个应用程序都需要对此做出决定,我可以提供一些数据点来帮助您做出明智的决定。

  1. Elasticsearch is a NRT search engine 并且从 RDB 更新 ES 时总会有一些延迟。因此,您在 RDB 中的某些项目不会在 ES 中,因此不会出现在您的搜索结果中。
  2. 考虑到以上,为什么你想再次调用 RDB,从你的 RDB 中获取最新信息,在你的 ES 搜索结果上或其他一些原因,比如避免 fetching/storing 来自 ES 的大数据?
  3. 每个字段ES都提供了一种方式来存储它或不使用默认启用store param or using _source,如果两者均未启用,则无法获取实际值,则必须转到RDB。
  4. 获取字段值的 RDB 调用会降低性能,您是否对其进行了基准测试而不是直接从 ES 获取值。

每个搜索系统都有自己的功能和非功能需求,基于以上几点,希望您获得更多信息,这将有助于您做出更好的决定。