如何从MySQL表(Innodb)检索记录,并根据记录的两列可能包含多少个子字符串排序结果。根据匹配的数量搜索MySQL文本列并根据匹配的数量排序
我正在搜索包含在两个不同列中的文本正文中的单词。所以这个词可能存在,它可能在前面或后面有未知的文本。
目前我的PHP代码创建了一个查询,该查询使用不同数量的不同子字符串搜索两列(包含文本)。
见简单的例子:
$string = "";
foreach $array_of_words as $word) {
$string = $string . " column_one LIKE '% $word%' OR column_two LIKE '% $word%' OR ";
}
$string = substr ($string, 0, - 3);
$query = "SELECT * FROM tbl_maintable WHERE (" . $string . ") LIMIT 5";
这工作得相当好,即使它不完全是我想什么,但是与上面的代码最大的问题是,它是资源密集型(7秒即可完成查询对一个100k的数据库)。
我已经看了一下自然语言搜索(在某种程度上),但是文档并没有给出我可以使用的明确的权威方法,以及MySQL服务器的MYSQL版本(5.5.44)问题没有InnoDB的选项。不过,如果这是唯一的选择,我会升级。
你试过全文搜索查询? – AnkiiG
您是否尝试过使用:'AND MATCH(columnName)AGAINST('textString'IN BOOLEAN MODE)> 0'替换'columnName'和'textString'.. – MaggsWeb
我试过全文搜索,但该选项仅适用于InnoDB 5.6及以上。 –