我可以使用InnoDB全文搜索对文档进行标记吗?

时间:2020-02-02 18:11:57

标签: mysql full-text-search innodb full-text-indexing fulltext-index

我曾经认为除非我们使用C语言编写一些用户定义的函数,否则SQL无法处理非结构化数据(如文本)。但是,InnoDB的FullText Search功能似乎已经完成了许多此类工作。

根据https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html,索引保存在名为FTS_00000..._00000..._INDEX_?的InnoDB表中。

我试图运行SELECT * FROM FTS_00000 ..._ 00000 ..._ INDEX_1,希望能看到每个文档中的标记(也许已经删除了停用词)。但是,我收到一条错误消息

ERROR 1146 (42S02): Table 'tf.FTS_0000000000000028_0000000000000030_INDEX_1' doesn't exist

即使select * from information_schema.INNODB_SYS_TABLES;显示该表存在。

有人知道我如何获得插入全文索引的每个文档的标记吗?如果能在以下数据模式中获取信息,那就太好了

token_id   document_id   count
"apple"    103343        3
"orange"    9593         1
...

1 个答案:

答案 0 :(得分:0)

仅仅因为InnoDB使用表作为内部数据结构并不意味着您有权使用SQL语句查询那些FTS表。它们不会出现在INFORMATION_SCHEMA.TABLES中。

创建表opening_lines(该手册页中给出的示例)后,我看到以下内容:

mysql> SELECT table_id, name, space FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES
    ->        WHERE name LIKE 'test/%';
+----------+----------------------------------------------------+-------+
| table_id | name                                               | space |
+----------+----------------------------------------------------+-------+
|       52 | test/FTS_000000000000002e_0000000000000085_INDEX_1 |    36 |
|       53 | test/FTS_000000000000002e_0000000000000085_INDEX_2 |    37 |
|       54 | test/FTS_000000000000002e_0000000000000085_INDEX_3 |    38 |
|       55 | test/FTS_000000000000002e_0000000000000085_INDEX_4 |    39 |
|       56 | test/FTS_000000000000002e_0000000000000085_INDEX_5 |    40 |
|       57 | test/FTS_000000000000002e_0000000000000085_INDEX_6 |    41 |
|       47 | test/FTS_000000000000002e_BEING_DELETED            |    31 |
|       48 | test/FTS_000000000000002e_BEING_DELETED_CACHE      |    32 |
|       49 | test/FTS_000000000000002e_CONFIG                   |    33 |
|       50 | test/FTS_000000000000002e_DELETED                  |    34 |
|       51 | test/FTS_000000000000002e_DELETED_CACHE            |    35 |
|       46 | test/opening_lines                                 |    30 |
+----------+----------------------------------------------------+-------+
12 rows in set (0.00 sec)

mysql> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='test';
+---------------+
| TABLE_NAME    |
+---------------+
| opening_lines |
+---------------+
1 rows in set (0.00 sec)

据我所知,根本无法直接查询FTS表。它们仅用于InnoDB的全文索引内部实现。

相关问题