【问题标题】:Converting a Multi-word search string for use in MySQL FULLTEXT Boolean mode转换多词搜索字符串以用于 MySQL FULLTEXT 布尔模式
【发布时间】:2012-08-15 23:51:37
【问题描述】:

我正在使用 Innodb 的 FTS 功能来搜索我的数据库并返回按相关性排序的结果。使用布尔模式时,必须将搜索字符串转换为必须用 +~-* 等运算符分隔各个术语的形式。

如果我有一个包含多个单词的搜索字符串,我如何(可能使用 PHP)转换搜索字符串以便可以将其与 MATCH()... .AGAINST() 子句一起使用?

搜索词:

stack over flow

SQL 查询

SELECT * FROM mytable WHERE 
    MATCH ( name, description) 
    AGAINST ('+*stack* +*over* +*flow*' IN BOOLEAN MODE);"

匹配结果

stack over flow
haystack hover flowers

【问题讨论】:

  • explode() 在空间上然后根据需要重建
  • 布尔模式可以返回相关性分数吗?如果不是,自然语言模式是否返回相关性分数以及与搜索字符串中的顺序不同的短语?
  • 'relevancy score" 可以。

标签: php mysql innodb full-text-search


【解决方案1】:

我做模糊搜索:

$search_words = explode(' ', $search);
foreach ($search_words as $foo) {
    $sql_search .= '*' . $foo . '* ' ;
} 

或常规:

$search_words = explode(' ', $search);
$sql_search = '+' . implode(" +", $search_words);

【讨论】:

    【解决方案2】:
    $string = 'stack over flow';
    
    $string = preg_replace('#\b(\S+)\b#', '+*\\1*', $string); # \b can be ommited
    
    echo $string; # +*stack* +*over* +*flow*
    

    其中一个解决方案,如果您正在寻找的话。

    【讨论】:

    • @Dagon 我不会反对。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    相关资源
    最近更新 更多