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