阅读ngram文档

This commit is contained in:
asahi
2025-02-24 18:52:34 +08:00
parent d2d901b37c
commit 838ec5ccc8

View File

@@ -77,6 +77,12 @@
- [配置`ngram_token_size`](#配置ngram_token_size) - [配置`ngram_token_size`](#配置ngram_token_size)
- [使用ngram parser创建fulltext Index](#使用ngram-parser创建fulltext-index) - [使用ngram parser创建fulltext Index](#使用ngram-parser创建fulltext-index)
- [ngram parser space handling](#ngram-parser-space-handling) - [ngram parser space handling](#ngram-parser-space-handling)
- [ngram handle stop word](#ngram-handle-stop-word)
- [natural language mode](#natural-language-mode)
- [boolean mode](#boolean-mode)
- [ngram parser wildcard Search](#ngram--parser-wildcard-search)
- [前缀小于ngram token size](#前缀小于ngram-token-size)
- [前缀大于ngram token size](#前缀大于ngram-token-size)
# innodb索引与算法 # innodb索引与算法
@@ -931,5 +937,64 @@ ngram parser在处理时消除空格示例如下
- `ab cd`会被转化为`ab``cd` - `ab cd`会被转化为`ab``cd`
- `a bc`会被转化为`bc` - `a bc`会被转化为`bc`
示例如下:
```sql
create table ngram_t (
id bigint auto_increment not null,
c1 text,
c2 text,
primary key(id),
fulltext `idx_ft_c1_c2` (c1, c2) with parser ngram
);
insert into ngram_t(c1, c2)
values
('突发!泽连斯基最新表态,称将与特朗普举行会谈', '与特朗普举行会谈'),
('如能换取乌克兰加入北约愿立即辞职','乌克兰总统泽连斯基称将与美国总统特朗普举行会谈,如能换取乌克兰加入北约愿立即辞职');
```
执行上述语句后,执行如下语句,分词信息如下所示:
```sql
set global innodb_ft_aux_table='innodb_demo/ngram_t';
select * from information_schema.INNODB_FT_INDEX_CACHE limit 20;
```
| WORD | FIRST\_DOC\_ID | LAST\_DOC\_ID | DOC\_COUNT | DOC\_ID | POSITION |
| :--- | :--- | :--- | :--- | :--- | :--- |
| ,如能换 | 3 | 5 | 2 | 3 | 118 |
| ,如能换 | 3 | 5 | 2 | 5 | 118 |
| ,称将与 | 2 | 4 | 2 | 2 | 33 |
| ,称将与 | 2 | 4 | 2 | 4 | 33 |
| !泽连斯 | 2 | 4 | 2 | 2 | 6 |
| !泽连斯 | 2 | 4 | 2 | 4 | 6 |
| 与特朗普 | 2 | 4 | 2 | 2 | 42 |
| 与特朗普 | 2 | 4 | 2 | 2 | 25 |
| 与特朗普 | 2 | 4 | 2 | 4 | 42 |
| 与特朗普 | 2 | 4 | 2 | 4 | 25 |
| 与美国总 | 3 | 5 | 2 | 3 | 82 |
| 与美国总 | 3 | 5 | 2 | 5 | 82 |
| 举行会谈 | 2 | 5 | 4 | 2 | 54 |
| 举行会谈 | 2 | 5 | 4 | 2 | 25 |
| 举行会谈 | 2 | 5 | 4 | 3 | 106 |
| 举行会谈 | 2 | 5 | 4 | 4 | 54 |
| 举行会谈 | 2 | 5 | 4 | 4 | 25 |
| 举行会谈 | 2 | 5 | 4 | 5 | 106 |
| 乌克兰加 | 3 | 5 | 2 | 3 | 12 |
| 乌克兰加 | 3 | 5 | 2 | 3 | 121 |
### ngram handle stop word
#### natural language mode
对于natural language mode`被搜索的词`将会被转化为ngram的并集例如`abc`假设ngram token size为2将会被转化为`ab bc`
如果存在两个文档,一个文档包含`ab`,另一个文档包含`abc`,搜索词`ab bc`将会匹配两个文档。
#### boolean mode
对于boolean modesearch item将会被转化为ngram phase search,例如`abc`将会被转化为`ab bc`,如果两个文档一个包含`ab`,另一个包含`abc`那么phase `ab bc`只会匹配包含`abc`的文档。
### ngram parser wildcard Search
使用ngram praser时fulltext index只包含ngrams使用通配符时会按照如下行为进行执行
#### 前缀小于ngram token size
如果前缀小于ngram token size那么查询将会返回所有以prefix item开始的行。例如`ngram_token_size`为2时查询`a*`将会返回所有以`a`开头的行
#### 前缀大于ngram token size
如果前缀大于ngram token size,那么前缀将会转化为ngram phase并且wildcard将会被忽略。例如`ngram_token_size`为2查询`abc*`将会转换为`ab bc`