---
title: "全文查询 - OceanBase 数据库 V4.4.0 | OceanBase 文档中心"
description: 全文查询 全文查询是指在文本数据中进行全文搜索或检索的操作。它用于查找包含特定关键词、短语或文本表达式的文本内容。全文查询能够更全面地搜索整个文本，并返回与搜索条件匹配的结果。 语法 使用以下语法进行全文索引查询时，可以根据指定的列和关键字或短语来执行全文搜索，并可以选择使用特定的搜索修饰符来调整搜索模式（即搜索条件…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.4.0

# 全文查询

更新时间：2025-09-22 12:03:04

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.4.0/zh-CN/700.reference/500.sql-reference/100.sql-syntax/200.common-tenant-of-mysql-mode/500.queries-and-subqueries-of-mysql-mode/400.full-text-query-of-mysql-mode.md)  

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

## 语法

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

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

search_modifier:
    IN NATURAL LANGUAGE MODE
    | IN BOOLEAN MODE
    | IN MATCH PHRASE MODE

```

**相关参数说明如下：**

- `column_name`：指定要进行全文搜索的列。如果要列出多个列，列之间需要使用英文逗号分隔。
 - `expr`：指定要搜索的关键字或短语。
 - `search_modifier`：可选项，用来指定搜索模式。取值和适用场景详见下表：

  | 搜索模式 | 参数说明 | 适用场景 |
  | --- | --- | --- |
  | IN NATURAL LANGUAGE MODE | 默认值，用于指定使用自然语言搜索模式进行搜索。 | 自然语言，topk 场景，进行模糊匹配，输出相关性，其中单词会根据表设置的分词器默认分词。 |
  | IN BOOLEAN MODE   #### 说明    对于 OceanBase 数据库 V4.3.5 版本，从 V4.3.5 BP1 版本开始支持 `IN BOOLEAN MODE`。 | 用于指定使用布尔模式进行搜索。当前版本支持的布尔运算符以及运算嵌套，具体如下：    - `+`：表示 `AND`，交集。   - `-`：表示非，差集。   - 无操作符号：单独使用时表示 `OR`，并集，如 `A B` 表示 `A OR B`。和符号混用会让存在的句子相关性变高，但会失去 `OR` 的语意，如 `+A B` 时，表示必须有 A，并计算句子中 A 和 B 的相关性。   - `()`：表示运算嵌套。外层无符号时，有 `OR` 的语意，如 `+A (嵌套子句)`，表示必须有 A 或者有嵌套子句。 | 过滤语意，精确匹配，根据用户输出语法过滤，可选择输出相关性，其中每个词只会根据空格和 `+`、`-`、`()` 分词。 |
  | IN MATCH PHRASE MODE   #### 说明    OceanBase 数据库从 V4.4.0 版本开始支持 `IN MATCH PHRASE MODE`。 | 用于指定使用 Phrase Query（短语查询）。 | 短语匹配，完全不分词，查询结果一定完全匹配。 |

  **示例如下：**

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

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

       ```
     2. 输出句子必须包含 computer，且一定不包含 weather。

       ```sql
       SELECT * FROM my_table WHERE MATCH (doc) AGAINST ("+computer -weather" IN BOOLEAN MODE);

       ```
     3. 输出句子必须包含 computer，有 oceanbase 更匹配。

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

       ```
     4. 使用短语匹配模式进行查询。

            - `MATCH AGAINST` 作为 `SELECT` 字段进行查询。

             ```sql
             SELECT id, MATCH (title, body) AGAINST ('some words' IN MATCH PHRASE MODE) AS score
             FROM test;

             ```
            - `MATCH AGAINST` 作为 `WHERE` 字段进行查询。

             ```sql
             SELECT * FROM test WHERE MATCH (title, body) AGAINST ('some words' IN MATCH PHRASE MODE);

             ```

更多 `MATCH AGAINST` 表达式的介绍，参见 [MATCH AGAINST](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000003383302)。

## 向量化查询

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

#### 注意

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

**示例如下：**

- 开启向量化查询。

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

  ```
 - 关闭向量化查询。

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

  ```

## 示例

1. 创建表 `tbl1`，同时创建全文索引 `full_idx1_tbl1`。

   ```sql
   CREATE TABLE tbl1(col1 INT PRIMARY KEY, col2 VARCHAR(100), col3 TEXT, FULLTEXT INDEX full_idx1_tbl1(col2, col3));

   ```
 2. 向表 `tbl1` 中添加测试数据。

   ```sql
   INSERT INTO tbl1 (col1, col2, col3) VALUES (1, 'Hello World', 'This is a test'),
       (2, 'OceanBase', 'OceanBase Database is a native, enterprise-level distributed database developed independently by the OceanBase team'),
       (3, 'Database Management', 'Learn about SQL and database administration'),
       (4, 'Full Text Searching', 'Master the art of full text searching');

   ```

   返回结果如下：

   ```shell
   Query OK, 4 rows affected
   Records: 4  Duplicates: 0  Warnings: 0

   ```
 3. 通过在 `MATCH` 子句指定对表 `tbl1` 中的 `col2` 列和 `col3` 列进行搜索，搜索的关键字是 'OceanBase'。同时，采用了搜索修饰符 `IN NATURAL LANGUAGE MODE`，表示使用自然语言搜索模式进行搜索。

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

```

返回结果如下：

```shell
+------+-----------+---------------------------------------------------------------------------------------------------------------------+
| col1 | col2      | col3                                                                                                                |
+------+-----------+---------------------------------------------------------------------------------------------------------------------+
|    2 | OceanBase | OceanBase Database is a native, enterprise-level distributed database developed independently by the OceanBase team |
+------+-----------+---------------------------------------------------------------------------------------------------------------------+
1 row in set

```

## 相关文档

- [创建索引](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000003379491)
 - [全文索引](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000003382115)

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
