我正在尝试实现乱序,前缀字符串匹配。最好的例子是Quora,它使用乱序前缀匹配查询您在搜索框中键入的字符串(不是谷歌搜索,因为谷歌搜索匹配到目前为止您输入的所有字符串)。
实施例: 查询:“sat” 可能会回来:
您可以获得的最高SAT成绩是什么
土星与地球的距离是多少?
他坐在板凳上
但是搜索“核心”(单词分数的最后4个字母)不会返回任何结果。
您会针对此问题推荐哪种算法和数据库?我打算在AJAX-y用户界面的网站上使用它(因此当用户输入字母时,结果将不断得到改进。)。我对任何类型的数据库都很好,这适用于宠物项目。谢谢!
答案 0 :(得分:0)
使用基于Trie的索引。 http://en.wikipedia.org/wiki/Trie。基本上是root-> s将存储所有句子的索引,这些句子至少有一个单词以s开头,root-> s-> a将存储所有句子的索引,这些句子至少有一个以sa开头的单词......等等。最好预处理列表(限制前k个单词,并显示与最常用单词相关的结果等)。
答案 1 :(得分:0)
您可以使用带有常规字典和反向字典的特里数据结构:http://phpir.com/tries-and-wildcards。还有压缩尝试,如暴击位,基数和帕特里夏尝试。