跳到主要内容

全文查询

全文查询是指在文本数据中进行全文搜索或检索的操作。它用于查找包含特定关键词、短语或文本表达式的文本内容。全文查询能够更全面地搜索整个文本,并返回与搜索条件匹配的结果。

语法

使用以下语法进行全文索引查询时,可以根据指定的列和关键字或短语来执行全文搜索,并可以选择使用特定的搜索修饰符来调整搜索模式(即搜索条件或规则)。

MATCH (column_name [, column_name ...]) AGAINST (expr [search_modifier])

search_modifier:
IN NATURAL LANGUAGE MODE
| IN BOOLEAN MODE

相关参数说明如下:

  • column_name:指定要进行全文搜索的列。如果要列出多个列,列之间需要使用英文逗号分隔。

  • expr:指定要搜索的关键字或短语。

  • search_modifier:可选项,用来指定搜索模式。取值如下:

    • IN NATURAL LANGUAGE MODE:默认值,用于指定使用自然语言搜索模式进行搜索。

    • IN BOOLEAN MODE:用于指定使用布尔模式进行搜索。当前版本支持三种最常用的布尔运算符,以及运算嵌套,具体如下:

      • +:表示 AND,交集。

      • -:表示非,差集。

      • 无操作符号:单独使用时表示 OR,并集,如 A B 表示 A OR B。和符号混用会让存在的句子相关性变高,但会失去 OR 的语意,如 +A B 时,表示必须有 A,并计算句子中 A 和 B 的相关性。

      • ():表示运算嵌套。外层无符号时,有 OR 的语意,如 +A (嵌套子句),表示必须有 A 或者有嵌套子句。

      示例如下:

      1. 输出句子必须包含 computer。

        SELECT * FROM my_table WHERE MATCH (doc) AGAINST ("+computer" IN BOOLEAN MODE);
      2. 输出句子必须包含 computer,且一定不包含 weather。

        SELECT * FROM my_table WHERE MATCH (doc) AGAINST ("+computer -weather" IN BOOLEAN MODE);
      3. 输出句子必须包含 computer,有 oceanbase 更匹配。

        SELECT * FROM my_table WHERE MATCH (doc) AGAINST ("+computer oceanbase" IN BOOLEAN MODE);

更多 MATCH AGAINST 表达式的介绍,参见 MATCH AGAINST

向量化查询

对于包含全文索引的查询,支持选择向量化或非向量化,可以使用 /*+ opt_param('rowsets_enabled', '[true | false]')*/ Hint 开启/关闭向量化。

提示

未指定 Hint 时,是否开启向量化受向量化引擎系统参数配置影响,默认为开启。

示例如下:

  • 开启向量化查询。

    SELECT /*+ opt_param('rowsets_enabled', 'true') */ title, body
    FROM articles
    WHERE MATCH(title, body) AGAINST('tutorial');
  • 关闭向量化查询。

    SELECT /*+ opt_param('rowsets_enabled', 'false') */ title, body
    FROM articles
    WHERE MATCH(title, body) AGAINST('tutorial');

示例

  1. 创建表 tbl1,同时创建全文索引 full_idx1_tbl1

    CREATE TABLE tbl1(col1 INT PRIMARY KEY, col2 VARCHAR(100), col3 TEXT, FULLTEXT INDEX full_idx1_tbl1(col2, col3));
    Query OK, 0 rows affected (0.101 sec)
  2. 向表 tbl1 中添加测试数据。

    INSERT INTO tbl1 (col1, col2, col3) VALUES (1, 'Hello World', 'This is a test'),
    (2, 'seekdb', 'OceanBase seekdb (referred to as seekdb) is an AI-native search database. It unifies relational, vector, text, JSON and GIS in a single engine, enabling hybrid search and in-database AI workflows.'),
    (3, 'Database Management', 'Learn about SQL and database administration'),
    (4, 'Full Text Searching', 'Master the art of full text searching');

    返回结果如下:

    Query OK, 4 rows affected (0.003 sec)
    Records: 4 Duplicates: 0 Warnings: 0
  3. 通过在 MATCH 子句指定对表 tbl1 中的 col2 列和 col3 列进行搜索,搜索的关键字是 'seekdb'。同时,采用了搜索修饰符 IN NATURAL LANGUAGE MODE,表示使用自然语言搜索模式进行搜索。

SELECT * FROM tbl1
WHERE MATCH (col2, col3) AGAINST ('seekdb' IN NATURAL LANGUAGE MODE);

返回结果如下:

+------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| col1 | col2 | col3 |
+------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 2 | seekdb | OceanBase seekdb (referred to as seekdb) is an AI-native search database. It unifies relational, vector, text, JSON and GIS in a single engine, enabling hybrid search and in-database AI workflows. |
+------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.002 sec)

相关文档