构建SMART mySQL和PHP搜索引擎的最佳方法是什么?

Lat*_*tox 15 php mysql search

构建mySQL和PHP搜索的最佳方法是什么?

我目前正在使用像

%术语%

我希望它能够找到结果,即使它们拼写错误,例如:

字段值="一:停止商店:

他们搜索:

一个商店站

要么

一站式商店

等等..我想要一个非常聪明的搜索,所以即使他们不搜索确切的东西,他们也会找到这些信息.

构建这样的智能搜索的最佳方法是什么?

ajr*_*eal 7

like '%term%'是非常缓慢和未经优化的,您可能希望为此列添加全文,并使用布尔模式

match(column) against('+One +Shop +Stop' in boolean mode)
Run Code Online (Sandbox Code Playgroud)

注意最小单词长度为4,因此,您需要考虑将其更改为3,并且全文搜索仅适用于myisam

sphinx这样的其他开源搜索引擎也非常适合这种情况

  • 如果您正在测试全文索引,请确保您有足够的测试数据,如果找到的结果大于总记录数的50%,则将其视为搜索失败.如果你不知道,这可能会影响你的理智.我现在好了. (3认同)

Sar*_*fan 6

通过搜索原始数据,您无法提高效率.这种文本搜索取决于数据的索引方式(这是Google bot为Google提供的).

所以,第1步是索引.如果您的数据位于某些网页中,则可以使用标准抓取工具(甚至可以轻松构建自己的抓取工具,我建议使用python来构建抓取工具).如果您的数据在某个文件中(不是可浏览的Web),那么对于索引,您需要编写一个程序来读取所有数据并将其编入索引.

第2步是搜索.搜索方法取决于索引策略.

如果您正在寻找基于php-mysql的系统,请查看这些项目的代码:

http://www.phpdig.net/

http://sphinxsearch.com/

如果您想了解更多信息,请在IEEE Xplore/ACM出版物档案中进行搜索.你会收到很多关于这个主题的论文.


小智 5

AJreal是对的...只是想我会添加一个示例来帮助:

 $query = sprintf("SELECT *, "
                    . " MATCH(data) AGAINST('%s' IN BOOLEAN MODE) AS relevance "
                    . " FROM table_name"
                    . " ORDER BY relevance DESC LIMIT 20 ",
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助