Mysql 我如何将此更改为进行全文搜索而不是类似的搜索?

Mysql 我如何将此更改为进行全文搜索而不是类似的搜索?,mysql,search,full-text-search,search-engine,sql-like,Mysql,Search,Full Text Search,Search Engine,Sql Like,经过一些研究,我把这些代码放在一起,在数据库中搜索一个mysql表。虽然它工作正常,但它限制自己与用户输入的单词完全匹配。有人知道如何使它符合我的某种关联吗?我一直在读有关全文搜索的文章,但我似乎不能真正理解它 例如,如果您在两个字段中搜索“未回答的问题”,我希望能够得到这样的结果,将搜索到的单词包含在显示在其中的任何字符串中,并根据相关性列出,如下所示(搜索结果示例输出): -未回答的问题 -回答问题 -回答问题 -未回答的问题 -未回答的问题 -问题 -答复 $k = trim ($

经过一些研究,我把这些代码放在一起,在数据库中搜索一个mysql表。虽然它工作正常,但它限制自己与用户输入的单词完全匹配。有人知道如何使它符合我的某种关联吗?我一直在读有关全文搜索的文章,但我似乎不能真正理解它

例如,如果您在两个字段中搜索“未回答的问题”,我希望能够得到这样的结果,将搜索到的单词包含在显示在其中的任何字符串中,并根据相关性列出,如下所示(搜索结果示例输出): -未回答的问题 -回答问题 -回答问题 -未回答的问题 -未回答的问题 -问题 -答复

    $k = trim ($_GET['search']);
    $i = "";
    $terms = explode (" ", $k);
    $query = "SELECT * FROM table1 WHERE ";

    foreach ($terms as $each){
    $i++;

    if ($i == 1)
    $query .= "fld_title LIKE '%$each%' OR fld_keyword LIKE '%$each%'        ";

    else
    $query .= "OR fld_title LIKE '%$each%' OR fld_keyword LIKE '%$each%' ";
    }

     // connect
     include_once "connect.php"; //connect 2 db
     $query = mysql_query($query);
     $numrows = mysql_num_rows ($query);
    if ($numrows > 0){

        while ($row = mysql_fetch_assoc ($query)){

    //
    //
    // echo out something here
    //
    //

    }

    }else
         {
        echo "No results found for <b>$k</b>";   
    } 
$k=trim($\u GET['search']);
$i=“”;
$terms=爆炸(“,$k”);
$query=“从表1中选择*”;
foreach($条款为每个$){
$i++;
如果($i==1)
$query.=“像“%$each%”这样的fld_标题或像“%$each%”这样的fld_关键字”;
其他的
$query.=”或类似“%$each%”的fld_标题或类似“%$each%”的fld_关键字;
}
//连接
包括一次“connect.php”//连接2分贝
$query=mysql\u query($query);
$numrows=mysql\u num\u行($query);
如果($numrows>0){
while($row=mysql\u fetch\u assoc($query)){
//
//
//在这里回音
//
//
}
}否则
{
回显“未找到$k的结果”;
} 

要进行全文搜索,您必须:

在表中创建全文索引(注意字段不能是BLOB)

就你而言:

ALTER TABLE table1 ADD FULLTEXT(fld_title, fld_keyword);
在php中进行更改

    $k = trim ($_GET['search']);
    $i = "";
    $terms = explode (" ", $k);
    $query = "SELECT * FROM table1 WHERE ";

    foreach ($terms as $each){
    $i++;

    if ($i == 1)
    $query .= "fld_title LIKE '%$each%' OR fld_keyword LIKE '%$each%'        ";

    else
    $query .= "OR fld_title LIKE '%$each%' OR fld_keyword LIKE '%$each%' ";
    }
为了

如果要查看结果的相关性,请执行以下操作:

$query="SELECT *, MATCH(fld_title, fld_keyword) AGAINST ('".$k."') as relevancy FROM table1 WHERE MATCH(fld_title, fld_keyword) AGAINST ('".$k."')";
匹配对返回一个数字:0表示不匹配或其他,具体取决于匹配

您可以“按相关性排序”,更改查询以使搜索更相关。。。将(fld_标题、fld_关键字)与(“$k.”)匹配>0.5

只有一个问题:反对部分($k)必须大于3个字符

$k = trim ($_GET['search']);
$query="SELECT * FROM table1 WHERE MATCH(fld_title, fld_keyword) AGAINST ('".$k."')";
$query="SELECT *, MATCH(fld_title, fld_keyword) AGAINST ('".$k."') as relevancy FROM table1 WHERE MATCH(fld_title, fld_keyword) AGAINST ('".$k."')";