全文搜索返回许多结果

时间:2016-01-26 12:54:56

标签: php mysql sql full-text-search

我需要在文本列中搜索列中某些单词的出现次数。

例如,作为示例,列内容可能如下所示:

  

套件:类型焊接颈部前部法兰,由两个法兰组成   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);";

但是大多数记录返回(它返回了数百条记录)并不包含在文本字段中输入的所有搜索字词。

如何微调全文搜索(或使用其他方法)以更接近输入的结果给出更好的结果?

编辑: 表类型: enter image description here

编辑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.

2 个答案:

答案 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