autocomplete - 如何使用Lucene或类似方法为超大型数据集的类型提前构造索引?

标签 autocomplete lucene indexing typeahead

我有一个拥有2亿多条记录的数据集,并希望构建一个专用的后端来插入一种类型提前的解决方案。鉴于Lucene的受欢迎程度和许可证类型,它很有趣,但是我也欢迎其他开源建议。我正在寻找建议,从from中获取故事,或者甚至更好地直接指导我所需的硬件和软件结构。要求:

一定有:

  • 的能力始于子串匹配(我键入“st”,并且应该匹配“Stephen”)
  • 快速返回结果的能力,我想说500ms是一个上限。

  • 很高兴有:
  • 将相关信息输入索引过程的能力,例如,可以更受欢迎的术语被返回到其他术语之前,而不仅仅是字母(也就是Google样式)。
  • 单词中的子字符串匹配,例如('st'将匹配'bestseller')

  • 笔记:
  • 该索引将纯粹用于前面的类型,并且不需要提供标准的搜索查询。
  • 只要可以将索引作为服务或直接通过Java代码查询,我就不会担心获得有关如何设置前端或AJAX的建议。

  • 投票支持任何有用的信息,这些信息使我可以更接近于企业级的类型提前解决方案

    最佳答案

    如果每个记录都比较小(少于几个单词),则可以尝试使用Trie数据结构:

    http://en.wikipedia.org/wiki/Trie

    它是为减轻快速前缀匹配而构建的,并且相对节省空间。我已经将此数据结构用于您要查找的确切自动完成功能,并且我知道其他为大量生产网站执行此功能的人。根据我的经验,单个查询的响应时间预计为数十毫秒。

    您可以很容易地自己实现Trie,也可以下载一些实现。看

    Where do I find a standard Trie based map implementation in Java?

    根据您使用的实现方式,用相关性分数标记每个索引记录应该相对简单,然后当您从查询中获取记录列表时,就可以使用该分数进行排序。

    关于autocomplete - 如何使用Lucene或类似方法为超大型数据集的类型提前构造索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2768770/

    相关文章:

    javascript - 谷歌地图放置自动完成加载事件

    html - cc-exp 的 Safari 自动完成功能不起作用

    java - Lucene 查询返回空字符串索引搜索

    python - neomodel:如何在 StructuredNode 对象之间共享索引

    jquery - Marklogic 中是否有简单的 XQuery 可以从简单的 XML 序列中生成 JSON 输出,以便与 JQuery 自动竞争一起使用

    Jquery,使用 json 自动完成,id 与显示值

    java - Lucene A-Z 列表

    elasticsearch - 您如何查找inner_hits计数为N的文档?

    python - 无法将 3d NumPy 数组 reshape 为 2d NumPy 数组

    mysql - 记录查询在 mysql 中缺少索引