跳到主要内容

全文检索与查询加速支持

全文检索算子

MATCH_ANY

  • 匹配包含任一关键词的行。
SELECT * FROM table_name WHERE content MATCH_ANY 'keyword1 keyword2';

MATCH_ALL

  • 匹配同时包含所有关键词的行。
SELECT * FROM table_name WHERE content MATCH_ALL 'keyword1 keyword2';

MATCH_PHRASE

  • 短语匹配,要求词项相邻且顺序一致。
  • 如需索引加速,请在索引属性中开启 "support_phrase" = "true"
SELECT * FROM table_name WHERE content MATCH_PHRASE 'keyword1 keyword2';

MATCH_PHRASE(带 slop)

  • 允许关键词之间存在最多 slop 个词的间隔。
-- 允许 keyword1 与 keyword2 之间最多间隔 3 个词
SELECT * FROM table_name WHERE content MATCH_PHRASE 'keyword1 keyword2 ~3';

MATCH_PHRASE(严格顺序)

  • 结合 + 与 slop,要求词序固定。
SELECT * FROM table_name WHERE content MATCH_PHRASE 'keyword1 keyword2 ~3+';

MATCH_PHRASE_PREFIX

  • 短语匹配,最后一个词按前缀匹配。
  • 当只给出一个词时,退化为该词的前缀匹配。
-- 最后一个词前缀匹配
SELECT * FROM table_name WHERE content MATCH_PHRASE_PREFIX 'keyword1 key';

-- 单词退化为前缀匹配
SELECT * FROM table_name WHERE content MATCH_PHRASE_PREFIX 'keyword1';

MATCH_REGEXP

  • 正则匹配(针对分词后的词项进行匹配)。
SELECT * FROM table_name WHERE content MATCH_REGEXP '^key_word.*';

MATCH_PHRASE_EDGE

  • 边缘短语匹配:首词按后缀匹配,中间词精确匹配,末词按前缀匹配;词项需相邻。
SELECT * FROM table_name WHERE content MATCH_PHRASE_EDGE 'search engine optim';

倒排索引查询加速

支持的运算符和函数

  • 等值与集合:=, !=, IN, NOT IN
  • 范围:>, >=, <, <=, BETWEEN
  • 空值判断:IS NULL, IS NOT NULL
  • 数组:array_contains, array_overlaps
-- 示例
SELECT * FROM t WHERE price >= 100 AND price < 200; -- 范围
SELECT * FROM t WHERE tags IN ('a','b','c'); -- 集合
SELECT * FROM t WHERE array_contains(attributes, 'color'); -- 数组