Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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_Search_Full Text Search_Sql Like - Fatal编程技术网

Php MySQL全文搜索多个关键字一个多个

Php MySQL全文搜索多个关键字一个多个,php,mysql,search,full-text-search,sql-like,Php,Mysql,Search,Full Text Search,Sql Like,我正在尝试使用MySQL的FTS搜索索引内容,以查找某些关键字。对于我要做的,它需要文本中的一个或多个关键字,并且关键字必须是精确的单词匹配。但是,关键字是否在另一个单词的中间并不重要,例如,当搜索“堆栈”时,应该匹配: 嗨,我有一堆溢出物 靠墙堆放 这些书架堆满了 我以前使用过以下方法: 选择。。。从…起其中像“%keyword1%”或像“%keyword2%”或像“%keyword3%”这样的文本 这将返回包含任何关键字的任何文本。然而,这开始减缓几乎所有事情的速度,因为大多数索引内容都很大

我正在尝试使用MySQL的FTS搜索索引内容,以查找某些关键字。对于我要做的,它需要文本中的一个或多个关键字,并且关键字必须是精确的单词匹配。但是,关键字是否在另一个单词的中间并不重要,例如,当搜索“堆栈”时,应该匹配:

  • 嗨,我有一堆溢出物
  • 靠墙堆放
  • 这些书架堆满了
  • 我以前使用过以下方法:

    选择。。。从…起其中像“%keyword1%”或像“%keyword2%”或像“%keyword3%”这样的文本

    这将返回包含任何关键字的任何文本。然而,这开始减缓几乎所有事情的速度,因为大多数索引内容都很大(存储在blob中),我有500多行需要索引。由于Like不使用此方法的任何索引,我尝试使用以下方法转换为FTS:

    SELECT ... FROM ... 
    WHERE MATCH(text) AGAINST ('+keyword1' IN BOOLEAN MODE) 
    OR MATCH(text) AGAINST ('+keyword2' IN BOOLEAN MODE)
    OR MATCH(text) AGAINST ('+keyword3' IN BOOLEAN MODE)
    
    选择。。。从…起其中(文本)与(“+keyword1+keyword2+keyword3”在布尔模式下匹配)

    这对单个关键字很有效,但当输入多个关键字时,这会失败,因为带+操作数的FTS需要找到与给定单词的匹配项。但如果没有这些关键字,FTS将匹配模糊结果,而不是精确结果。我最终错过了最明确包含关键词的内容


    如何获取包含一个或多个axact关键字的所有内容?

    尝试以下方法:

    SELECT * FROM table MATCH (text) AGAINST ('+"keyword1" +"keyword2"' IN BOOLEAN MODE)
    

    听起来您正在寻找以下内容:

    SELECT ... FROM ... 
    WHERE MATCH(text) AGAINST ('+keyword1' IN BOOLEAN MODE) 
    OR MATCH(text) AGAINST ('+keyword2' IN BOOLEAN MODE)
    OR MATCH(text) AGAINST ('+keyword3' IN BOOLEAN MODE)
    

    这与不使用“”的情况相同,它只查找包含所有关键字的文本,而不是其中任何一个关键字。