【问题标题】:MySQL String pattern matching - Alternatives for likeMySQL 字符串模式匹配 - like 的替代品
【发布时间】:2012-01-24 18:20:19
【问题描述】:

MySQL like 子句允许像'%keyword%' 这样的通配符搜索,其中关键字夹在列值中。

对于关键字包含部分列值的模式匹配,当%keyword%不起作用时,我们可以使用INSTR函数进行搜索。

例子:

Column="Apple"
$keyword = "An Apple a day"

在这里,我们不能通过Column like '%$keyword%' 进行匹配,但(INSTR('$Keyword', Column)>0 会进行匹配。

除了 INSTR 之外,我们还有哪些替代方案(正则表达式?、全文搜索?、lucene?)用于模式匹配这种情况(示例?)?

更新:

Column = "Golden Apple"
$keyword = "An Apple a day"

即使对于这样的示例,我也希望能够将 $keyword 与列匹配,因为它们有一个通用术语“Apple”。

【问题讨论】:

    标签: mysql sql regex full-text-search pattern-matching


    【解决方案1】:

    在这种情况下,你仍然可以使用LIKE

    '%$keyword%' LIKE CONCAT('%', Column, '%') 
    

    或正则表达式:

    '%$keyword%' REGEXP Column
    

    【讨论】:

    • 如果 Column="Golden Apple",这将不起作用。如果无论位置如何,搜索词和列都有一些匹配的字符,这就会成为一个问题。我会更新我的问题以反映这种情况。
    • 你的意思是你想匹配Golden Appleapple pie
    • 没错!如果它们有任何一组连续的匹配字符,我想匹配它们。
    • 一个字符?因为任何带有aei 或...的列都将匹配Apple pie。所以,几乎任何东西。
    • 可能是的。它也会匹配单个字符。但我们必须做出的假设是,使用此逻辑的应用程序通常会包含长度超过一个字符的搜索词。
    【解决方案2】:

    我不太清楚你到底想做什么,但试试这个链接可以找到关于pattern matching in mysql的帮助

    您是在编写过程、触发器还是只是一个选择?

    【讨论】:

    • 我不关心触发器或过程。假设您的要求是将关键字与问题示例中的列值匹配,您会怎么做?一个简单的like 子句不是这里的解决方案,所以我正在寻找替代方案。
    【解决方案3】:

    还要考虑SOUNDEXNatural Language(使用全文搜索和相关性)搜索。

    【讨论】:

      猜你喜欢
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      • 2014-08-20
      • 2022-01-02
      相关资源
      最近更新 更多