我正在开发一个摄影数据库,其中每个图像都有一个描述,这是相当自由的形式。我希望用户能够搜索这个数据库-最初我使用LIKE %... %,但在许多情况下,这给了太多的匹配-例如,搜索猫可能会返回类别和其他单词。所以我决定使用REGEXP和\B来匹配单词边界,除非有特殊字符,否则这基本上是可行的。
在我的测试数据库中,我有包含以下文本片段的记录:taken in Victoria by
taken in Melbourne (Victoria) by
taken in Melbourne (Victoria). This is
this is a Victorian monument
如果我的搜索是LIKE %victoria%
,我会得到所有4条记录,正如我所期望的-但这可能不是用户想要的。
如果我的搜索是REGEXP '\\bvictoria\\b'
我只得到了前三个记录。到目前为止一切顺利-但我无法控制我的用户寻找什么-如果他们只想要记录2和3呢?所以我搜索REGEXP '\\(victoria\\)'
我确实得到了我想要的两张唱片。但是如果我做REGEXP '\\b\\(victoria\\)\\b'
我什么都没得到。如果试图让他们只寻找第三个记录(与尾随。它也失败了。有什么建议吗?
2条答案
按热度按时间kd3sttzy1#
您可以使用
|
语法。这将尝试匹配任一模式。
jobtbby32#
短间隙解决方案:
培养基溶液:
这将使用
WHERE MATCH(textfield) AGAINST('victoria')
作为搜索条件。部分卸载解决方案:
SphinxSE提供了MariaDB语法的全文搜索功能。它有点过时了,因为自从放弃SphinxSE的开发以来,Sphinx已经取得了显著的进步。
全卸载解决方案:
您可以通过使用专用搜索引擎(如Sphinx,Solr等)获得更好的全文搜索功能。