LIKE 和 RLIKE 运算符编辑

LIKERLIKE 运算符通常用于根据字符串模式过滤数据。它们通常作用于运算符左侧的字段,但也可以作用于常量(字面量)表达式。运算符的右侧表示模式。两者都可以在 SELECT 语句的 WHERE 子句中使用,但 LIKE 也可以在其他地方使用,例如定义 索引模式 或跨各种 SHOW 命令。本节仅涵盖 SELECT ... WHERE ... 的用法。

LIKE/RLIKE全文搜索谓词 之间的一个显著区别是,前者作用于 精确字段,而后者也适用于 已分析 字段。如果与 LIKE/RLIKE 一起使用的字段没有精确的非规范化子字段(关键字 类型),Elasticsearch SQL 将无法运行查询。如果该字段是精确的或具有精确的子字段,它将按原样使用,或者即使在语句中未明确指定,它也会自动使用精确的子字段。

LIKE编辑

语法

expression        
LIKE constant_exp 

通常是字段或常量表达式

模式

**描述**:SQL LIKE 运算符用于使用通配符将值与相似值进行比较。与 LIKE 运算符一起使用的有两个通配符

  • 百分号 (%)
  • 下划线 (_)

百分号表示零个、一个或多个字符。下划线表示单个数字或字符。这些符号可以组合使用。

没有其他字符具有特殊含义或充当通配符。在其他语言中经常用作通配符的字符(*?)被视为普通字符。

SELECT author, name FROM library WHERE name LIKE 'Dune%';

    author     |     name
---------------+---------------
Frank Herbert  |Dune
Frank Herbert  |Dune Messiah

此外,如果需要匹配通配符本身,还可以使用转义字符。这可以通过在 LIKE ... 运算符后使用 ESCAPE [escape_character] 语句来完成

SELECT name, author FROM library WHERE name LIKE 'Dune/%' ESCAPE '/';

在上面的示例中,/ 被定义为转义字符,如果需要专门匹配模式中的 %_ 字符,则需要将其放在这些字符之前。默认情况下,没有定义转义字符。

尽管 LIKE 在 Elasticsearch SQL 中搜索或过滤时是一个有效的选项,但全文搜索谓词 MATCHQUERY 速度更快,功能更强大,是首选替代方案

RLIKE编辑

语法

expression         
RLIKE constant_exp 

通常是字段或常量表达式

模式

**描述**:此运算符类似于 LIKE,但用户不限于使用百分号 (%) 和下划线 (_) 基于固定模式搜索字符串;在这种情况下,模式是正则表达式,允许构造更灵活的模式。

有关支持的语法,请参阅 _正则表达式语法_

SELECT author, name FROM library WHERE name RLIKE 'Child.* Dune';

    author     |      name
---------------+----------------
Frank Herbert  |Children of Dune

尽管 RLIKE 在 Elasticsearch SQL 中搜索或过滤时是一个有效的选项,但全文搜索谓词 MATCHQUERY 速度更快,功能更强大,是首选替代方案

首选全文搜索谓词编辑

使用 LIKE/RLIKE 时,请考虑使用 全文搜索谓词,它们速度更快,功能更强大,并提供按相关性排序的选项(可以根据匹配程度返回结果)。

例如

LIKE/RLIKE

QUERY/MATCH

foo LIKE 'bar'

MATCH(foo, 'bar')

foo LIKE 'bar' AND tar LIKE 'goo'

MATCH('foo^2, tar^5', 'bar goo', 'operator=and')

foo LIKE 'barr'

QUERY('foo: bar~')

foo LIKE 'bar' AND tar LIKE 'goo'

QUERY('foo: bar AND tar: goo')

foo RLIKE 'ba.*'

MATCH(foo, 'ba', 'fuzziness=AUTO:1,5')

foo RLIKE 'b.{1}r'

MATCH(foo, 'br', 'fuzziness=1')