MySql全文搜索,包含多个包含/开头/结尾的单词或部分匹配单词

时间:2017-11-19 04:49:32

标签: mysql search full-text-search

每个人。

我使用MySQL数据库并面临全文搜索问题。我将我的桌子转换成了MyISAM。

这是我的查询..

$inputwords=" balu text ama som" (// input words by user in a single input box)
$result=SELECT * FROM my table Where MATCH (data, remark, purpose) AGAINST ('$inputwords' IN BOOLEAN MODE);

它为所有行提供任何输入字的完全匹配。

  1. 我的要求是" balu" - baluch,balusahi,hotbalu等。对于像外卡这样的所有其他词语也一样。
  2. 我再次要求包含上面部分相似的所有单词的唯一行。
  3. 任何帮助......请。

1 个答案:

答案 0 :(得分:0)

要获取FullText LIKE中的MATCH() AGAINST()行为,您必须使用*作为AGAINST,这相当于使用%作为LIKE。我的想法是拥有这样的整个字符串:

$inputWords = "*balu* *text* *ama* *som*";

以下是代码:

$inputWords = "balu text ama som"; // input words by user in a single input box

// Create array of words by splitting with space char
$keywords = explode(" ", $inputWords);

$words = '';

foreach($keywords as $key => $value) {
    // concatenate all words following by space, and add * at start and end of the word
    $words .= '*'.$value.'*';

    // add space only if it is not the last word
    if($key < count($keywords) - 1)
        $words .= ' ';
}

然后你可以拥有你的:

$result=SELECT * FROM my table Where MATCH (data, remark, purpose) AGAINST ('$inputwords' IN BOOLEAN MODE);

单词“balu”将匹配baluch,balusahi,hotbalu。

我不知道它是如何降低性能的,但它仍然比我服务器中的Like '%word%'快。