带有转义字符的MariaDB REGEX

gzjq41n4  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(69)

我正在开发一个摄影数据库,其中每个图像都有一个描述,这是相当自由的形式。我希望用户能够搜索这个数据库-最初我使用LIKE %... %,但在许多情况下,这给了太多的匹配-例如,搜索猫可能会返回类别和其他单词。所以我决定使用REGEXP和\B来匹配单词边界,除非有特殊字符,否则这基本上是可行的。
在我的测试数据库中,我有包含以下文本片段的记录:taken in Victoria bytaken in Melbourne (Victoria) bytaken in Melbourne (Victoria). This isthis is a Victorian monument
如果我的搜索是LIKE %victoria%,我会得到所有4条记录,正如我所期望的-但这可能不是用户想要的。
如果我的搜索是REGEXP '\\bvictoria\\b'
我只得到了前三个记录。到目前为止一切顺利-但我无法控制我的用户寻找什么-如果他们只想要记录2和3呢?所以我搜索REGEXP '\\(victoria\\)'
我确实得到了我想要的两张唱片。但是如果我做REGEXP '\\b\\(victoria\\)\\b'
我什么都没得到。如果试图让他们只寻找第三个记录(与尾随。它也失败了。有什么建议吗?

kd3sttzy

kd3sttzy1#

您可以使用|语法。
这将尝试匹配任一模式。

\bvictoria\b|\(victoria\)
  • Wikipedia -正则表达式- POSIX扩展 *。
jobtbby3

jobtbby32#

短间隙解决方案:

  • 对正在搜索的表元素使用不区分大小写的排序规则

培养基溶液:

这将使用WHERE MATCH(textfield) AGAINST('victoria')作为搜索条件。
部分卸载解决方案:
SphinxSE提供了MariaDB语法的全文搜索功能。它有点过时了,因为自从放弃SphinxSE的开发以来,Sphinx已经取得了显著的进步。
全卸载解决方案:
您可以通过使用专用搜索引擎(如Sphinx,Solr等)获得更好的全文搜索功能。

相关问题