轻量级模糊搜索库
我们可以建议一些轻量级的模糊文本搜索库吗?
我要做的是允许用户使用错字来找到正确的搜索词数据。
我可以使用像Lucene这样的全文搜索引擎,但是我认为这太过分了。
编辑:
为了使问题更清楚,这里是该库的主要方案:
我有很多字符串。我希望能够在此列表中进行搜索(类似于MSVS的intellisense),但应该可以通过其中不存在但与列表中某个字符串足够接近的字符串来过滤此列表。
例子:
- 红色的
- 绿色的
- 蓝色
在文本框中键入" Gren"或者" Geen"时,我想在结果集中看到"绿色"。
索引数据的主要语言是英语。
我认为Lucene在完成这项任务方面是沉重的。
更新:
我发现一种符合我要求的产品。它是ShuffleText。
我们知道其他选择吗?
解决方案
回答
在页面底部,有@aku指向可工作的soundex库的链接。
至于Levenshtein距离,有关Wikipedia的文章的底部也列出了实现。
回答
Soundex在编码方面非常"英文",Daitch-Mokotoff对许多名称(尤其是欧洲(德国)和犹太名称)的效果更好。在我以英国为中心的世界中,这就是我所使用的。
Wiki在这里。
回答
Lucene具有很好的可扩展性,这也意味着它对于很少的应用程序也有好处。如果需要,我们可以在内存中快速创建索引。
对于模糊搜索,我们确实需要确定要使用哪种算法。通过信息检索,我成功地将Lucene与n-gram技术结合使用。但这是一种特殊的索引技术,而不是本身的"库"。
在不了解应用程序的情况下,推荐合适的库并不容易。我们要搜索多少数据?数据是什么格式?数据多久更新一次?
回答
如果可以选择使用数据库,建议使用PostgreSQL及其模糊字符串匹配功能。
如果可以使用Ruby,建议我们研究一下amatch库。
回答
我们没有指定开发平台,但是如果它的PHP则建议我们查看ZEND Lucene库:
http://ifacethoughts.net/2008/02/07/zend-brings-lucene-to-php/
http://framework.zend.com/manual/zh/zend.search.lucene.html
由于它的LAMP比Java上的Lucene轻得多,并且可以轻松扩展为其他文件类型,只要我们可以找到转换库或者cmd行转换器,就可以使用许多OSS解决方案。
回答
尝试基于集成到SQL Server和Oracle DB的Lucene API的Walnutil。我们可以创建任何类型的索引,然后使用它。对于简单的搜索,我们可以使用核桃软件的一些方法,对于更复杂的搜索情况,可以使用Lucene API。请参阅基于Web的示例,其中使用了从Walnutil Tools创建的索引。我们还可以看到一些用Java和C编写的代码示例,可以将其用于创建不同类型的搜索。
该工具是免费的。
http://www.walnutilsoft.com/