【问题标题】:Mysql full text search with match and againstMysql全文搜索与匹配和反对
【发布时间】:2016-04-20 15:13:16
【问题描述】:

我必须在描述字段上使用 mysql 全文搜索。

现在假设我在一个表中有以下 4 条记录:

 Description field:
    aa bb cc dd
    xx aa ff gg
    hh kk cc qq
    cc ee tt aa

现在如果我搜索术语“aa cc”,那么它应该读取那些必须记录这两个词的描述。所以下面的记录应该是结果。

  aa bb cc dd
    cc ee tt aa

mysqlmatch() against()查询怎么写?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您应该使用REGEXP '[[:<:]]aa[[:>:]]' 来查找确切的单词,所以试试下面的查询它工作正常。

    SELECT * FROM `table_name` 
         WHERE `table_name`.`Description` REGEXP '[[:<:]]aa[[:>:]]' 
         and `table_name`.`Description` REGEXP '[[:<:]]cc[[:>:]]';
    

    注意:您也可以使用 like '%cc%',但可能会出现复杂的问题,因为如果您搜索 'cc',这意味着它将搜索整个字符串中的 cc 解析,而不是一个确切的单词所以我强烈推荐你使用REGEXP '[[:&lt;:]]word[[:&gt;:]]

    示例:

    输入表

          Description
        aa   bb cc   dd
        xx   aa ff   gg
        hh   kk cc   qq
        cc   ee tt   aa
        aamm bb cc   dd
        aa   bb ccmm dd
    

    输出:

         Description
       aa   bb cc   dd   
       cc   ee tt   aa    
    

    【讨论】:

      【解决方案2】:

      假设您的表名是table1,包含字符串的列是col_name,那么您可以使用以下查询

      select * from table1 where col_name like '%aa%' and col_name like '%cc%'
      

      【讨论】:

      • 如果在数据库中也有 'aamm bb cc dd' 数据,那么它也会返回这个输出,因为上面的查询没有搜索确切的单词。
      猜你喜欢
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多