我有很多数据需要非常快速地进行模糊查询(当然,这是相对的,但对于约1亿个键,在几秒钟的范围内,但理想情况下更快)。它是键/值对的形式,其中键是唯一的字符串,值是字符串数组。这是实际数据的结构,但我可以自由地将其组织成任何数据结构,使查找更快。
键的值的查找不仅应包括该精确键的值,还应包括在预定阈值内的levenshtein距离内的所有键的值(例如,5)。 < / p>
例如,查找hello
不仅应返回hello
键下索引的所有值,还应返回Hello
,hello!
,{{1}的值}},yello
,helo
等
当然,天真的解决方案是迭代每个键,计算其levenshtein距离,并包括其值,如果它在某个阈值内。但是,这个解决方案不能很好地扩展O(n)时间复杂度来迭代每个密钥,O(n-1)迭代每个密钥以将其与之进行比较,并且每个levenshtein计算得到O(n),从而导致查找O(n * n * n-1)的时间当然是不可接受的。
如何构建此数据以优化查找时间复杂度?空间复杂性,插入,删除和编辑运行时都是无关紧要的(但是,我更喜欢将插入保持在一秒以下,以避免出现瓶颈)。
有关数据的一些信息:
答案 0 :(得分:0)
我不确定这里使用的数据结构,但最简单的选择可能是使用ElasticSearch&#39; s fuzzy query或其亲属。从根本上说,它是使用具有良好优化的反向索引来执行模糊查询。