构建mySQL&的最佳方法是什么? PHP搜索?
我目前正在使用
之类的内容%术语%
我希望它能够找到结果,即使它们拼写错误,例如:
字段值=“一:停止商店:
他们搜索:
One Shop Stop
OR
一站式服务
等等。我想要一个非常聪明的搜索,这样即使他们不搜索确切的东西,他们也会找到这些信息。
建立这样的智能搜索的最佳方法是什么?
答案 0 :(得分:6)
like '%term%'
非常缓慢且未经优化,您可能希望为此列添加全文,use boolean mode for this
如
match(column) against('+One +Shop +Stop' in boolean mode)
请注意最小单词长度为4,因此,您需要考虑将其更改为3,并且全文搜索仅适用于myisam
像sphinx这样的其他开源搜索引擎也非常适合
答案 1 :(得分:5)
通过搜索原始数据,您无法提高效率。这种文本搜索取决于数据的索引方式(这是谷歌机器人为谷歌提供的地方)。
所以,第1步是索引。如果您的数据位于某些网页中,则可以使用标准抓取工具(甚至可以轻松构建自己的抓取工具,我建议使用python来构建抓取工具)。如果您的数据在某个文件中(不是可浏览的Web),那么对于索引,您需要编写一个程序来读取所有数据并将其编入索引。
第2步正在搜索。搜索方法取决于索引策略。
如果您正在寻找基于php-mysql的系统,请查看这些项目的代码:
如果您想了解更多信息,请搜索IEEE Xplore / ACM出版物档案。你会收到很多关于这个主题的论文。
答案 2 :(得分:5)
AJreal是对的...只是想我会添加一个例子来帮助:
$query = sprintf("SELECT *, "
. " MATCH(data) AGAINST('%s' IN BOOLEAN MODE) AS relevance "
. " FROM table_name"
. " ORDER BY relevance DESC LIMIT 20 ",
希望这有帮助
答案 3 :(得分:2)
您可以使用SOUNDEX()函数,它可以在PHP和MYSQL中使用 SOUNDEX() with MYSQL
答案 4 :(得分:0)
简单,智能且安全
timpng1
在上面的Ajreal
Answer
上举了一个例子,我想使其安全。
$conn = new mysqli('server', 'username', 'password', 'dbName');
$q = $conn->real_escape_string($_GET["query"]);
$sql = $conn->prepare("SELECT *, MATCH(col1, col2) AGAINST(? IN BOOLEAN MODE) AS relevance FROM my_table ORDER BY relevance DESC LIMIT 20");
$sql->bind_param("s", $q);
$sql->execute();
$rs = $sql->get_result();