我正在寻找一个搜索引擎,它可以指向我的数据库中支持拼写更正和“接近”结果等高级功能的列。
现在我只是在使用
SELECT <column> from <table> where <colname> LIKE %<searchterm>%
我错过了一些结果,尤其是当用户拼错项目时。
我编写了一些代码来通过拼写检查器运行它来修复拼写错误,但我认为可能有更好的开箱即用选项可供使用。谷歌提供了很多索引和搜索整个网站的选项,我真的只需要索引和搜索这一表列。
Apache Solr 是一个很棒的搜索引擎,它提供 (1) N-Gram 索引(不仅搜索完整的字符串,还搜索部分子字符串,这有助于获得类似的结果)(2) 提供基于距离的开箱即用拼写校正器公制/编辑距离(这将帮助您在用户输入 chicaog 时获得“您的意思是芝加哥”)(3)它为您提供了一个开箱即用的模糊搜索选项(模糊搜索帮助您获得与您的查询,例如,如果用户输入 GA-123,他将获得 VMDEO-123 作为结果)(4)Solr 还为您提供“更多类似”组件,它可以帮助您解决上述选项。
Solr(基于 Lucene 搜索库)是开源的,并且正在慢慢上升为搜索(垂直)行业的事实,并且非常适合数据库搜索(正如您所说的索引数据库列,这是 Solr 的小菜一碟)。许多财富 500 强公司以及互联网巨头都在使用 Lucene 和 Solr。
Sphinx 搜索引擎也很棒(我也喜欢它,因为它对所有内容的占用空间都非常小,并且基于 C++),但简单地说,Solr 更受欢迎。
现在 Python 支持和 API 都可用于两者。然而,Sphinx 是一个 exe,而 Solr 是一个 HTTP。所以对于 Solr,你只需从你的 python 程序中调用 Solr URL,它会返回结果,你可以发送到前端进行渲染,就这么简单)
到目前为止,一切都很好。来到你的问题:
首先,您应该问自己,您是否真的需要搜索引擎?搜索引擎适用于上述所有用例,但真正适用于搜索大量全文数据或数百万行表格数据。你的意思是什么,类似的记录,拼写校正等算法可以写在上面。在对 Solr 进行归零之前,还请在 Google 上搜索 (1) Peter Norvig Spell Corrector & (2) N-Gram Indexing。可能性是,只需编写几行代码,您就可以获得真正想要的东西。
我让你决定:)
我建议研究像 Sphynx Search 这样的开源技术。
在沿着 Solr/Sphinx 路线进行全文索引之前——这会增加复杂性和它们自己的开销——如果你使用的是 PostgreSQL 数据库,你可以尝试使用 PostgreSQL 中的内置全文引擎。它易于设置并且比LIKE
查询性能更好。