自动完成java、redis、elastic search、mongo

vohkndzv  于 2021-06-09  发布在  Redis
关注(0)|答案(2)|浏览(320)

我必须实现一个自动完成超过500000名,这可能会增加到超过400万名。
后端是使用spring的javarestweb服务调用。我应该使用mongodb、redis或elasticsearch来存储和查询/搜索名称吗?

qgelzfjb

qgelzfjb1#

这是一个关键的搜索用例,mongodb和redis非常适合基于关键字的查找,而不是用于搜索目的,而elasticsearch是一个分布式搜索引擎,专门为这种用例构建。
在选择系统之前,您应该知道您的特性在内部是如何工作的,以及在选择系统时应考虑的问题。

功能的非功能性需求

每秒的搜索查询总数(qps)是多少?
更新文档的频率(例如,示例中的名称)。
在搜索结果中更新和出现的名称之后,sla是什么?
搜索结果的sla。

一些功能要求。

自动完成应该是什么样子,前缀,中缀搜索的名字?
在显示自动完成结果之前,用户应键入的最小字符数。
上述要求可以更改的频率。
elasticsearch在倒排索引中索引文档,并处理令牌匹配(可轻松定制以满足业务需求),因此搜索速度非常快。redis和mongodb在内部没有这个结构,不应该用于这个用例。您不应该对选择elasticsearch而不是这些来实现自动完成有任何疑问。
由于autocomplete是一个重要的搜索功能,有一个很好的博客,您应该阅读它来了解elasticsearcg提供的不同方法及其利弊。

nfg76nw0

nfg76nw02#

你可以使用重新搜索(https://oss.redislabs.com/redisearch/). 它是一个自由文本搜索引擎,作为redis模块构建在redis之上。它还具有自动完成功能。

相关问题