Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 转换多字搜索字符串以在MySQL全文布尔模式下使用_Php_Mysql_Innodb_Full Text Search - Fatal编程技术网

Php 转换多字搜索字符串以在MySQL全文布尔模式下使用

Php 转换多字搜索字符串以在MySQL全文布尔模式下使用,php,mysql,innodb,full-text-search,Php,Mysql,Innodb,Full Text Search,我正在使用Innodb的FTS功能搜索我的数据库并返回按相关性排序的结果。使用布尔模式时,必须将搜索字符串转换为一种形式,其中各个术语必须由一些运算符分隔,如+,~,-,* 如果我有一个包含多个单词的搜索字符串,我如何(可能使用PHP)转换搜索字符串,以便将其用于MATCH()。反对()子句 搜索词: 堆栈溢出 SQL查询: SELECT * FROM mytable WHERE MATCH ( name, description) AGAINST ('+*stack* +*

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

如果我有一个包含多个单词的搜索字符串,我如何(可能使用PHP)转换搜索字符串,以便将其用于
MATCH()。反对()
子句

搜索词:

堆栈溢出

SQL查询

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

stack over flow
haystack hover flowers
其中一个解决方案,如果这是你正在寻找的

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

对于模糊搜索,我会:

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

$search_words = explode(' ', $search);
$sql_search = '+' . implode(" +", $search_words);
对于模糊搜索,我会:

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

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

空间上的explode(),然后按要求重建可以布尔模式返回相关性分数吗?如果不是,自然语言模式是否返回相关性分数,以及与搜索字符串中的顺序不同的短语?“相关性分数”是,它可以。explode()在空间上,然后按要求重建can布尔模式返回相关性分数?如果不是,自然语言模式是否返回相关性分数以及与搜索字符串中的顺序不相同的短语?“相关性分数”可以。@Dagon我不同意。@Dagon我不同意。