当前位置: 首页 > 面试题库 >

Java自动完成,Redis,Elastic Search,Mongo

谢修真
2023-03-14
问题内容

我必须使用500,000个以上的名称来实现自动完成功能,以后可能会增加到400万个以上的名称。

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


问题答案:

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

在选择系统之前,您应该了解功能在内部的工作方式,并且要在选择它的考虑因素以下。

功能的非功能性要求

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

一些功能要求。

  1. 自动完成应如何显示名称的前缀,中缀?
  2. 在向他们显示自动完成结果之前,最小化用户应键入的字符数。
  3. 以上要求可以多久更改一次。

Elasticsearch在反向索引中建立索引的文档,并且可以处理令牌匹配(可以轻松定制以适应业务需求),因此搜索速度非常快。Redis和MongoDB在内部没有这种结构,因此不应在此用例中使用。您不应该对选择Elasticsearch来实现自动完成功能有任何疑问。

由于自动完成是必不可少的搜索功能之一,因此有一个出色的博客,您应该阅读该博客以了解Elasticsearcg提供的不同方法及其折衷方法。



 类似资料:
  • 问题内容: 如何使用Redis实现自动完成功能? 比如说我有一个数组。当我型我得到 我希望你明白这一点。我如何有效地使用redis命令来实现这一点(如果可能,但我认为是)。如果我能通过telnet尝试一些简单的命令来模仿这种行为,那就太好了。 谢谢 问题答案: 如果您要处理的是大型数据集,建议您考虑将其实现。我将一小部分Ruby做到了这一点: 例如: 在Wikipedia的Tries条目上阅读有关

  • 问题内容: 我必须使用500,000个以上的名称来实现自动完成功能,以后可能会增加到400万个以上的名称。 后端是使用Spring的Java REST Web服务调用。我应该使用 MongoDB , Redis 还是 Elasticsearch 来存储和查询/搜索名称? 问题答案: 这是一个关键的搜索用例,MongoDB和Redis非常适合基于键的查找,而不是用于搜索目的,而Elasticsear

  • 自动完成是现代网站中经常使用的一种机制,用于向用户提供他/她在文本框中键入的单词开头的建议列表。 然后,用户可以从列表中选择一个项目,该项目将显示在输入字段中。 此功能可防止用户输入整个单词或一组单词。 JQueryUI提供了一个自动完成窗口小部件 - 一个与下拉列表非常相似的控件,但过滤选项只显示与用户在控件中键入的内容相匹配的选项。 jQueryUI提供了autocomplete()方法,用于

  • md-autocomplete是一个Angular Directive,用作一个特殊的输入控件,带有内置下拉列表,显示与自定义查询的所有可能匹配。 一旦用户键入输入区域,该控件就充当实时建议框。 《md-autocomplete》可用于从本地或远程数据源提供搜索结果。 执行查询时md-autocomplete缓存结果。 第一次调用后,它使用缓存的结果来消除不必要的服务器请求或查找逻辑,并且可以禁用

  • 描述 (Description) 自动填充是Framework7的移动友好和触摸优化组件,可以是下拉列表或独立方式。 您可以使用JavaScript方法创建和初始化自动完成实例 - myApp.autocomplete(parameters) 其中parameters是用于初始化自动完成实例的必需对象。 自动填充参数 下表列出了Framework7中可用的自动填充参数 - S.No 参数和描述