Java 500000个街道名称-使用什么数据结构和方法实现快速搜索?

Java 500000个街道名称-使用什么数据结构和方法实现快速搜索?,java,algorithm,search,data-structures,autocomplete,Java,Algorithm,Search,Data Structures,Autocomplete,所以我们有很多街道的名字。它们排成一列。在生产中启动服务器时,我可能会缓存它们。搜索应该是自动完成的,比如你输入“lang”,你可能会得到8个点击:langstr,langestr。Etc您正在寻找的是某种压缩的trie表示。您可能希望以或作为起点,因为它们提供了出色的效率和非常好的空间利用率 希望这有帮助 自动完成通常使用以下方法之一实现: 树。通过索引树结构(前缀树、后缀树、dawg等)中的可搜索文本,可以以牺牲内存存储为代价执行非常快速的搜索。树遍历可以适应近似匹配 模式分区。通过将文本

所以我们有很多街道的名字。它们排成一列。在生产中启动服务器时,我可能会缓存它们。搜索应该是自动完成的,比如你输入“lang”,你可能会得到8个点击:langstr,langestr。Etc

您正在寻找的是某种压缩的trie表示。您可能希望以或作为起点,因为它们提供了出色的效率和非常好的空间利用率


希望这有帮助

自动完成通常使用以下方法之一实现:

  • 。通过索引树结构(前缀树、后缀树、dawg等)中的可搜索文本,可以以牺牲内存存储为代价执行非常快速的搜索。树遍历可以适应近似匹配
  • 模式分区。通过将文本划分为标记(ngram),可以使用简单的散列方案执行模式出现的搜索
  • 过滤。找到一组可能的匹配项,然后应用顺序算法检查每个候选项

看看Java autocomplete库,它实现了后面的一些概念。

@tq-我不熟悉mongodb,所以我不能对此发表评论。很抱歉考虑一下你可能想看看Apache SoR,它提供了自动完成OOTB,而不必从头开始。