轻量级模糊搜索库

时间:2008-09-03 15:49:21

标签: fuzzy-search

你能建议一些轻量级模糊文本搜索库吗?

我想要做的是允许用户使用拼写错误找到搜索字词的正确数据。

我可以使用像Lucene这样的全文搜索引擎,但我认为这样做太过分了。

修改
为了使问题更清楚,这是该库的主要方案:
我有一个很大的字符串列表。我希望能够在此列表中搜索(类似于MSVS的intellisense),但应该可以按字符串过滤此列表,该字符串不在其中但与列表中的某个字符串足够接近。
示例:

  • 红色
  • 绿色

当我在文本框中输入'Gren'或'Geen'时,我希望在结果集中看到'Green'。

索引数据的主要语言是英语。

我认为Lucene对于这项任务非常重要。

更新

我找到了一个符合我要求的产品。这是ShuffleText 你知道其他选择吗?

9 个答案:

答案 0 :(得分:3)

Lucene具有很高的可扩展性 - 这意味着它对小应用程序也有好处。如果您需要的话,可以非常快速地在内存中创建索引。

对于模糊搜索,您确实需要确定要使用的算法。通过信息检索,我成功地使用了n-gram技术和Lucene。但这是一种特殊的索引技术,而不是“库”本身。

如果不了解您的应用程序,推荐合适的库并不容易。你在搜索多少数据?数据的格式是什么?数据的更新频率是多少?

答案 1 :(得分:2)

我不确定Lucene是否适合模糊搜索,自定义库是更好的选择。例如,这个搜索是用Java完成的,并且运行得非常快,但它是为这样的任务定制的: http://www.softcorporation.com/products/people/

答案 2 :(得分:1)

Soundex的编码非常'英语' - Daitch-Mokotoff对许多名字都有效,尤其是欧洲(日耳曼语)和犹太名字。在我以英国为中心的世界里,这就是我的用途。

Wiki here

答案 3 :(得分:1)

如果您可以选择使用数据库,我建议您使用PostgreSQL及其fuzzy string matching functions

如果您可以使用Ruby,我建议您查看amatch library

答案 4 :(得分:1)

您没有指定您的开发平台,但如果它的PHP建议您查看ZEND Lucene lubrary:

http://ifacethoughts.net/2008/02/07/zend-brings-lucene-to-php/ http://framework.zend.com/manual/en/zend.search.lucene.html

因为LAMP在Java上比Lucene轻得多,并且可以很容易地扩展到其他文件类型,只要你能找到转换库或cmd行转换器 - 有很多OSS解决方案可以做到这一点。

答案 5 :(得分:1)

尝试使用基于Lucene API的Walnutil - 集成到SQL Server和Oracle DB。您可以创建任何类型的索引,然后使用它。对于简单搜索,您可以使用walnutilsoft中的一些方法,对于更复杂的搜索案例,您可以使用Lucene API。请参阅基于Web的示例,其中使用了从Walnutil Tools创建的索引。您还可以看到一些用Java和C#编写的代码示例,您可以使用它来创建不同类型的搜索。 这个工具是免费的。 http://www.walnutilsoft.com/

答案 6 :(得分:0)

@aku - 链接到工作soundex库就在页面底部。

至于Levenshtein距离,Wikipedia article on that也有底部列出的实现。

答案 7 :(得分:0)

强大,轻量级的解决方案是sphinx

它比Lucene小,它支持消歧。

它是用c ++编写的,速度快,经过实战考验,每个环境都有库,大型公司也使用它,比如craigslists.org

答案 8 :(得分:0)

检查此链接。它使用levenshtein距离指标但速度更快。 http://narenonit.blogspot.com/2012/07/fuzzy-matching-autocomplete-library.html