【问题标题】:How to view the index contents of a fulltext index in MySQL?如何在 MySQL 中查看全文索引的索引内容?
【发布时间】:2018-06-20 11:28:51
【问题描述】:
是否可以在 MySQL 中看到 FULLTEXT INDEX 的实际内容?或者直接查询索引(比如SELECT words FROM table.fulltext_index,它会返回所有被索引的单词,举个例子)?
对于标量字段上的常规 b 树索引,这不是必需的,因为它们只是相同的值,只是为了加快查找速度(基本上)。但是在全文索引中发生了如此多的“语言魔法”,以至于当对表格执行INSERT 时,很难知道索引中实际包含什么。
【问题讨论】:
标签:
mysql
indexing
full-text-search
full-text-indexing
【解决方案1】:
MyISAM 有办法,但您可能没有使用该版本。它包括一种获取单词的方法。
InnoDB 使用单词 + 行号(可能是PRIMARY KEY)+ 列(如果您将多个列一起索引)+ 列中的字节偏移量来构建倒排索引。我怀疑最后一项存储为 commalist (或类似的)。也就是说,我设想索引是这样的:
CREATE TABLE ft_index_for_table_x (
word VARCHAR ...,
pk ..., -- possibly multiple columns
col ..., -- which column the word occurs in
offsets ..., -- list of byte offsets
PRIMARY KEY(word, pk, col)
) ENGINE=InnoDB -- but not really.
另外,请注意有一堆临时文件;这些似乎在最终整合到上述结构之前收集了索引信息。
我还没有听说过检查索引的工具。
这得到了一些东西,但我认为这不是单词列表:
strings FTS*.ibd |
awk '/^[a-z]+$/' |
sort |
uniq -c |
sort -nr
最后的排序将它们排在最前面;删除以按字母顺序获取它们。