繁体   English   中英

MySQL REGEXP搜索多个单词

[英]MySQL REGEXP search multiple words

Products.Name字段名称包含PETISCO NESTLE PURINA DOG CHOW CARINHOS MIX DE FRUTAS

我需要搜索单词DOG和单词NESTEL (错误的单词),但是前三个字母是正确的。
我不知道单词的顺序。

我尝试过类似REGEXP '[^DOG][^NESTEL]{3}'但是不起作用!

谢谢

更新1:

当用户键入DOG和NESTEL时,我希望我的应用程序显示包含DOG和NESTLE字样的所有产品,即使部分字样是错误的!

更新2:

where Products.Name REGEXP '[[:<:]]?=*NES.*[[:>:]]' and Products.Name REGEXP '[[:<:]]?=*DOG.*[[:>:]]'

这向我显示了狗E NES,但是如果用户键入NESTEL而不是NESTLE?

您需要mysql的levenshtein函数 它将根据与搜索到的单词(即NESTEL)的相似性对所有结果进行评估,然后将其与该额外比率字段一起返回。 然后,您只需要选择一个比率更高的列表,或者选择一个比率更高的列表...等等。

SELECT ...
    FROM ...
    WHERE Name REGEXP '[[:<:]]dog[[:>:]]'
      AND Name REGEXP '[[:<:]]nes';
  • 您希望“ dog”成为“ word”,因此希望单词边界事物。
  • 您想要一些以“ nes”开头的“ word”,因此仅是单词开头的东西。
  • 它不检查“ nes ...”中的6个字母,那是

      AND Name REGEXP '[[:<:]]nes[az]{3}[[:>:]]'; 

可能存在排序规则问题; 请提供SHOW CREATE TABLE

迷你课程:

  • [^DOG]说“匹配1个字节,但不匹配DOG
  • [^NESTEL]{3}说完全匹配3个字节,但不能是这6个字母中的任何一个。
  • MySQL不处理任何以_开头的运算符?
  • NES.*[[:>:]]NES匹配,后跟字符串的其余部分-这是因为*为“贪心”,并且[[:>:]]将匹配字符串的结尾。
  • 像'%dog%nes%'的词边界没有测试。
  • nes***作为正则表达式将表示ne后跟任意数量的s ,包括零。
  • nes...将匹配nes加3种任何字节。 因此,所有内容都表明nes不能太靠近字符串的结尾。
WHERE some_col LIKE '%dog%nes%' or some_col LIKE '%nes%dog%'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM