使用 java、Redis、Elastic Search、Mongo 自动完成

mar*_*rcg 4 java autocomplete mongodb redis elasticsearch

我必须实现超过 500,000 个名字的自动完成,这些名字以后可能会增加到超过 400 万个名字。

后端是使用 Spring 的 Java REST Web 服务调用。我应该使用 MongoDBRedis还是 Elasticsearch 来存储和查询/搜索名称?

Ami*_*wal 8

这是一个关键的搜索用例,MongoDB 和 Redis 非常适合基于键的查找,而不是用于搜索目的,而 Elasticsearch 是一个分布式搜索引擎,专为此类用例构建。

在选择系统之前,您应该了解您的功能在内部如何工作以及选择它的考虑因素。

您的功能的非功能性需求

  1. 每秒搜索查询总数 (QPS) 是多少?
  2. 您更新文档的频率(即示例中的名称)。
  3. 名称更新并出现在搜索结果中后的 SLA 是什么?
  4. 您的搜索结果的 SLA。

一些功能需求。

  1. 自动完成应该如何,前缀,中缀搜索名称?
  2. 在向他们显示自动完成结果之前,用户应该输入的最少字符数。
  3. 上述要求的更改频率。

Elasticsearch 在倒排索引中索引文档并处理令牌匹配(可以轻松定制以满足业务需求),因此搜索速度非常快。Redis 和 MongoDB 内部没有这种结构,不应用于此用例。您应该毫无疑问选择 Elasticsearch 而不是这些来实现自动完成。