我需要在文本列中搜索列中某些单词的出现次数。
例如,作为示例,列内容可能如下所示:
套件:类型焊接颈部前部法兰,由两个法兰组成 JACK SCREWS但没有螺栓和垫圈,等级600,升级 FACE,BORE TO MATCH .312 IN WALL,MATERIAL FORGED 304不锈钢 ASTM-A182等级F304,规格:SP-50-13 REV:1
现在用户需要输入文本框,例如以下内容:
ASTM-A182 F304 WELD NECK
目前我使用此代码:
$sql = "SELECT * FROM commtable WHERE MATCH (ldisc) AGAINST ('" . $ldisc . "' IN NATURAL LANGUAGE MODE);";
但是大多数记录返回(它返回了数百条记录)并不包含在文本字段中输入的所有搜索字词。
如何微调全文搜索(或使用其他方法)以更接近输入的结果给出更好的结果?
编辑2: 它现在正在运行,添加了这段代码:
if ($ldisc != "") {
$parts = explode(" ", $ldisc);
$tempSQL = "SELECT * FROM commtable WHERE MATCH (ldisc) AGAINST (" . "'";
for ($i = 0; $i < count($parts); $i++) {
$tempSQL = $tempSQL . '+' . $parts[$i] . ' ';
}
$tempSQL = $tempSQL . "' IN BOOLEAN MODE);";
$sql = $tempSQL;
$result = mysqli_query($con, $sql);
}
并将最小字长改为1.
答案 0 :(得分:2)
这个问题听起来基本上就像你在寻找的那样:MySQL fulltext search - Only results that contain all words
NATURAL LANGUAGE MODE
本质上返回近似匹配。要匹配BOOLEAN MODE
中的所有字词,您必须在每个必需字词前添加+
。例如,
MATCH (ldisc) AGAINST ('+ASTM-A182 +F304 +WELD +NECK' IN BOOLEAN MODE)
您必须拆分输入字符串并添加+
符号。如何做到这一点留给程序员一个练习。 =)
答案 1 :(得分:1)
将其更改为布尔模式
"SELECT * FROM commtable WHERE MATCH (ldisc) AGAINST ('" . $ldisc . "' IN BOOLEAN MODE);";
另一件事是留意ft_min_word_length