【问题标题】:mysql FULLTEXT search multiple wordsmysql FULLTEXT 搜索多个单词
【发布时间】:2011-10-06 17:38:19
【问题描述】:

我从来没有真正听到过关于这个问题的直接答案,我只需要 FULLTEXT 搜索几个包含多个单词“Firstname Lastname”的列

$sql = mysql_query("SELECT * FROM 
                    patient_db 
                    WHERE MATCH ( Name, id_number )
                    AGAINST ('% $term %' IN BOOLEAN MODE);");

但是如果我在这里输入多个单词,它会无法运行查询。

【问题讨论】:

    标签: php mysql search


    【解决方案1】:
    SELECT * 
    FROM patient_db 
    WHERE MATCH ( Name, id_number ) 
          AGAINST ("Firstname Lastname" IN BOOLEAN MODE);
    

    双引号很重要。这从字面上查找短语“Firstname Lastname”。 您不需要百分号。

    如果您查找“Firstname blahblahblah Lastname blahblah”,AGAINST() 子句必须如下所示:

    AGAINST ('+Firstname +Lastname' IN BOOLEAN MODE);
    

    查看MySQL docs on full text search 了解更多信息。

    另一件事:为什么你的比赛中有id_number 列?

    【讨论】:

    • 您好,抱歉,我昨晚在睡觉前发布了该消息。这仍然不适合我,我只有一个名为 $term 的搜索字段,名字和姓氏都在同一个 mySQL 列中
    【解决方案2】:
    $sql = mysql_query("SELECT * FROM 
             patient_db WHERE 
             MATCH ( Name, id_number ) 
             AGAINST ('+first_word +second_word +third_word' IN BOOLEAN MODE);");
    

    如果您想进行精确搜索:

    $sql = mysql_query("SELECT * 
                      FROM patient_db 
                      WHERE MATCH ( Name, id_number ) 
                      AGAINST ('"exact phrase"' IN BOOLEAN MODE);");
    

    【讨论】:

    • 如果您在 1 MATCH AGAINST 查询中可以搜索的字词数量也有限制,有人可以告诉我吗?在这个答案的例子中,你有 third_word 这也在我自己的查询中工作,但是当我把 +fourth_word & 即使它存在于列中,它确实返回空结果。
    • “精确短语”并不意味着没有任何符号 (+/-) 的精确短语,它将被视为 OR。全文搜索没有确切的词组,只有所有的词,一些词,没有一个词。
    • 这会在 5 年内发生变化
    • @Gamesh 全文搜索确实具有“精确短语”搜索,只要您将短语括在双引号中。我现在在我的一个项目中使用它。
    • @Chris 你说得对,不知道我在想什么:A phrase that is enclosed within double quote (") characters matches only rows that contain the phrase literally, as it was typed. The full-text engine splits the phrase into words and performs a search in the FULLTEXT index for the words. Nonword characters need not be matched exactly: Phrase searching requires only that matches contain exactly the same words as the phrase and in the same order. For example, "test phrase" matches "test, phrase".
    猜你喜欢
    • 1970-01-01
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    相关资源
    最近更新 更多