Node.js或C(不包括全文search)的大小写不敏感,确切的子string匹配/索引

哪些库在Node.js中提供大小写不敏感的确切子string匹配,以及大量的string? 我正在寻找基于索引的解决scheme。

举一个例子,考虑一个语料库包含数百万个string:

  • "Abc Gef gHi"
  • "Def Ghi xYz"

我需要一个库,以便search"C ge"返回上面的第一个string,但search"C ge" (注意多个空格)不会。 换句话说,我并不是在寻找模糊的,智能的,全文search的词干和停词; 而是一个最简单的(和快速的)准确的子串匹配器,其索引大规模工作。

JavaScript中的解决scheme是受欢迎的,C中的解决scheme也是如此 (因为它们可以变成本地的Node.js模块)。 另外, 其他编程语言(如Java)的解决scheme也是可能的 ; 他们可以通过命令行使用。 优选地,解决scheme是磁盘空间限制的而不是内存限制的(例如,而不是Redis),并且它们应该向磁盘写入索引,以便后续的启动时间很短。

我发现的大部分解决scheme(如这里的问题 )的问题是,它们太聪明了。 也就是说,他们应用不同的词干或标准化,所以比赛是不准确的。

在此先感谢您的帮助!

我会列出一些我find的解决scheme。

最简单的,但拟合将是https://github.com/martijnversluis/JsSuffixTrie

然后,更详细的哈希基于: https : //github.com/fergiemcdowall/search-index

我也可以build议http://redis.io/ 。 这是先进的,但还是相当低级的。 没有太多花哨的包装。

最后,这个博客文章讨论尝试在JavaScript中,问题似乎是主要加载时间: http : //ejohn.org/blog/javascript-trie-performance-analysis/

在我头上我可以想到两个可能的解决scheme。

一个是使用不区分大小写的正则expression式(使您search的string(例如"C ge" )是正则expression式)匹配。

另一种方法是存储所有string的全部较低(或较高)的大小写副本,并在返回未修改的string时将其用于search。 当然,searchstring需要全部更低(或更高)的情况下才能正常工作。

这当然取决于你的数据集的大小和最小的响应时间。

对于许多用例来说,标准的Unix工具(如sedgrep在模式匹配方面是相当无懈可击的。