用于缓存和搜索产品的弹性搜索?

Elastic search for caching and searching the product?

我需要像电子商务一样设计功能(考虑酒店预订网站)我们可以输入 keyword/partial-keyword 并需要 return 相关结果。 例如:- 如果站点管理员或酒店所有者需要在系统中添加以下酒店详细信息,它也会添加到缓存中(基本上它将通过缓存写入)。

Hotel-Name: New River       
City: NewYork         
Rating:4 Star
Rate($):500

我的问题是如何在系统中设计以下几点

  1. 我是否需要将酒店数据存储在缓存中,因为键值对可能正在使用 Redis 或 Memcache?键和值是什么?
  2. 如果我将其存储为键值对,我将如何使用部分关键字进行搜索(例如输入 river newyork 而不是 new river newyork) 可以是部分酒店名称和城市的组合吗?
  3. 有什么可能的分片键来分配缓存中的数据?

认为这个系统的可扩展性与 Goibibo 一样。

我建议的解决方案:-

阅读以下两个资源后,看起来我可以使用 Elastic search(ES) 来解决上述所有三点问题。它会做的是:-

  1. 创建名称为 hotel_data 的索引,它将包含酒店 json 文档
  2. 的所有可搜索字段的索引
  3. ES会将索引存入内存
  4. 然后我可以搜索部分单词 search partial words

链接

elasticsearch-from-the-bottom-up

elasticsearch-hello-world-example

但是当我和 CTO 讨论这种方法时,他告诉你正在混合弹性搜索和弹性缓存,并说弹性搜索可以用于搜索和 用于缓存的弹性缓存。

但是当我再次重新阅读这些资源时,我发现弹性搜索用于缓存和搜索。所以我发现我的方法没有错。 我的方法有什么用吗?

Elasticsearch 可以用作缓存或搜索引擎。默认情况下elasticsearch索引数据是持久化的(文件系统),你也可以为memorymap配置它

有关各种文件系统存储类型,请参阅下文 https://www.elastic.co/guide/en/elasticsearch/reference/6.3/index-modules-store.html

ElastiCache 是 Amazon (AWS) 提供的内存中数据存储服务,可用于缓存。

您提出的选择 Elasticsearch 的解决方案是一个不错的选择,因为它是开源的,可以在本地使用,也可以使用云服务。与 Redis 等缓存框架相比,Elasticsearch 可以让您更好地控制搜索。

您可以执行更复杂的搜索,例如根据您的关键字提供自定义权重并搜索结果。例如对于酒店的案例搜索,您可以灵活地创建任何可能的过滤器,例如定价 Class、带停车位、带阳台...等。

但最主要的是您需要从您的数据源构建索引,该索引将为您的站点服务。在缓存中,每当您查询数据源时,您的缓存就会生成。