我不知道下面的代码。我一直在尝试寻找几个小时,但似乎找不到任何东西。

我想做的是找到符合某些条件的所有单词。在此示例中,我试图找到所有包含单词“ shoe”或“ shoes”等(请注意星号),也包含“ leather”或“ neathers”等但不包含单词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)


我似乎无法正确理解逻辑,我似乎得到的结果仅包含单词“ Shoe(s)”,但不包含“ leather(s)”或“ Leather(s),但不包含“ Shoe(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)


我已经学会了使用“ +”和“-”,但是我不知道如何在上述情况下使用它们。

如果有人可以帮助我指出正确的方向,我将非常感激。

最佳答案

您的代码:


  SELECT * FROM wp_posts WHERE post_type ='product'AND MATCH(post_content,post_title,post_name)反对('“ * shoe *”“ *皮革*”-“运动鞋”-“靴子”-“高跟鞋”-“夹克”- “教练员”-“皮带”-“泵”(在布尔模式下)


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


  SELECT * FROM wp_posts WHERE post_type ='product'AND MATCH(post_content,post_title,post_name)再次('*鞋* *皮革*-运动鞋-靴子-“高跟鞋”-夹克-运动鞋-皮带-泵'在BOOLEAN MODE中


我删除了多余的引号。引号之间的星号(*)不能按预期工作,因为引号中的内容是按字面意义使用的。请参阅MySQL FullText Boolean以获取本节内容:




用双引号(“”)括起来的短语仅与按字面意义包含该短语的行匹配,全文引擎将其拆分为单词,并在FULLTEXT索引中搜索这些单词。非单词字符不需要完全匹配:短语搜索仅要求匹配项包含与短语完全相同且顺序相同的单词,例如,“测试短语”与“测试短语”匹配。

如果该短语不包含索引中的单词,则结果为空。例如,如果所有单词均为停用词或比索引单词的最小长度短,则结果为空。


在您的代码中-“ * shoe *”和-“ * leather *”将无法正常工作。删除引号应该可以解决该问题。

关于mysql - PHP SQL-针对()的match(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25609915/

10-11 16:19