【问题标题】:MySQL - partial searchMySQL - 部分搜索
【发布时间】:2015-02-07 10:22:50
【问题描述】:

任何人都知道如何在数据库中搜索部分单词。

例如-

我的字符串是二十一世纪福克斯

数据库列值为 21st Century Fox

如何使用 MySQL LIKE 或 LOCATE 或任何其他查询获得结果?

我要匹配的是——“st Century Fox”

【问题讨论】:

  • WHERE Column LIKE'%twenty-first%' OR Column LIKE'%century%' OR Column LIKE'%fox%'.
  • 您应该查看全文搜索:dev.mysql.com/doc/refman/5.7/en/fulltext-search.html
  • 我在所有需要创建与您需要的搜索类似的项目的项目中都使用全文搜索。

标签: php mysql sql-like


【解决方案1】:

您可能应该调查FULLTEXT 搜索;它旨在在21st Century Fox 中查找fox 之类的内容。它涉及创建一个特殊用途的索引,然后使用MATCH() 谓词进行搜索。

但是理解21stTwenty-first 是等价的是一项更复杂的任务。这涉及同义词列表或其他知识来源。如果你必须这样做,你应该研究 Sphinx 或 Lucene。

【讨论】:

    【解决方案2】:

    使用 Soundex 函数将两个字符串...

    <?php
    $str = "Twenty-first Century Fox";
    $str1 = "21st Century Fox";
    echo soundex($str);
    echo soundex($str1);
    ?>
    

    【讨论】:

      【解决方案3】:

      一个简单的解决方案是将字符串分解为单词数并使用ORLIKE 进行搜索。在这种情况下。

      $keyword  = 'Twenty-first Century Fox';
      $keywords = explode($keyword,' ');
      
      $keySearch = array();
      foreach ($keywords as $keyword){
          $keySearch[] = 'column LIKE \'%'.$keyword.'%\'';
      }
      
      $query = 'SELECT * FROM tableName WHERE '.implode(' OR ',$keySearch);
      

      【讨论】:

        猜你喜欢
        • 2020-12-04
        • 1970-01-01
        • 1970-01-01
        • 2012-07-16
        • 2014-05-09
        • 1970-01-01
        • 1970-01-01
        • 2019-07-24
        相关资源
        最近更新 更多