Impala如何查询同时包含Hi、teo、code三个指定关键词的字段内容
Impala字段同时匹配多个关键词的正确实现
你原先的
rlike 'Hi teo code'要求三个词严格按顺序连续出现,和需求不符;|、OR逻辑是「满足任意一个即可」,自然也得不到同时包含三个词的结果。
方案1:多AND条件匹配(推荐,可读性高、不易出错)
直接拆分每个关键词的匹配条件,用AND连接即可:
select * from db.table where content rlike 'Hi' AND content rlike 'teo' AND content rlike 'code';
如果需要忽略大小写(比如示例中的Teo也需要匹配teo关键词),可以用regexp_like加不区分大小写参数:
select * from db.table where regexp_like(content, 'Hi', 'i') AND regexp_like(content, 'teo', 'i') AND regexp_like(content, 'code', 'i');
方案2:单正则正向前瞻匹配
如果希望写在一个正则表达式里,可以用Impala适配的Java正则正向前瞻语法,确保三个词都存在:
select * from db.table where content rlike '(?=.*Hi)(?=.*teo)(?=.*code)';
忽略大小写的版本只需要在正则开头加(?i)修饰:
select * from db.table where content rlike '(?i)(?=.*Hi)(?=.*teo)(?=.*code)';
两种方案都可以匹配你给出的示例'Teo, Hi your pass is 123code'(忽略大小写场景)。
内容的提问来源于stack exchange,提问作者DrGenius
相关产品推荐
相关产品推荐

