PHP SQL - match()对()

时间:2014-09-01 16:30:47

标签: mysql sql boolean

我无法弄清楚以下代码。我一直在努力寻找几个小时,但我似乎找不到任何东西。

我要做的是找到符合某些条件的所有单词。在这个例子中,我试图找到包含单词“shoe”或鞋子等的所有条目(注意星号),并且还包含“皮革”或皮革等,但也不包括单词trainer,boot ,高跟鞋,夹克,运动鞋,皮带或泵

SELECT * FROM wp_posts WHERE post_type = 'product' AND MATCH (post_content,post_title,post_name) AGAINST ('"*shoe*" "*leather*" -"trainer" -"boot" -"high heels" -"jacket" -"trainers" -"belt" -"pumps" ' IN BOOLEAN MODE)

我似乎无法得到正确的逻辑,我似乎得到的结果只包含“鞋子”而不是“皮革”或“皮革但不是”鞋子(s) )“我也试过以下但没有成功:

SELECT * FROM wp_posts WHERE post_type = 'product' AND MATCH (post_content,post_title,post_name) AGAINST ('+"*shoe*" +"*leather*" -"trainer" -"boot" -"high heels" -"jacket" -"trainers" -"belt" -"pumps" ' IN BOOLEAN MODE)

我已经学会了使用“+”和“ - ”,但我无法弄清楚如何在上面的场景中使用它们。

如果有人可以帮我指出正确的方向,我真的很感激。

1 个答案:

答案 0 :(得分:0)

您的代码:

  

SELECT * FROM wp_posts WHERE post_type =' product' AND MATCH(post_content,post_title,post_name)反对('" *鞋*"" *皮革*" - "培训师" - &#34 ;靴子" - "高跟鞋" - "夹克" - "培训师" - "腰带" - "泵&#34 ;'在布尔模式中)

我相信你要找的东西(使用BOOLEAN MODE)类似于:

  

SELECT * FROM wp_posts WHERE post_type =' product' AND MATCH(post_content,post_title,post_name)反对(' *鞋* *皮革* -trainer -boot - "高跟鞋" -jacket -trainers -belt -pumps'在BOOLEAN模式)

我删除了无关的引号。 Asterisk(*)在引号之间没有按预期工作,因为引号中的内容是字面意思。有关此部分,请参阅MySQL FullText Boolean

" 括在双引号(“"”)字符中的短语仅匹配包含短语字面的行,因为它是键入的。全文引擎将短语拆分为单词,并在单词的FULLTEXT索引中执行搜索。非单词字符不需要完全匹配:短语搜索只需要匹配包含与短语完全相同的单词并且顺序相同。例如,"测试短语"匹配"测试,短语"。 如果短语不包含索引中的单词,则结果为空。例如,如果所有单词都是停用词或短于索引单词的最小长度,则结果为空。

在您的代码中 - " * shoe *"和 - " *皮革*"不会按预期工作。删除引号应解决该问题。