阅读ngram文档
This commit is contained in:
@@ -77,6 +77,12 @@
|
||||
- [配置`ngram_token_size`](#配置ngram_token_size)
|
||||
- [使用ngram parser创建fulltext Index](#使用ngram-parser创建fulltext-index)
|
||||
- [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索引与算法
|
||||
@@ -931,5 +937,64 @@ ngram parser在处理时消除空格,示例如下:
|
||||
- `ab cd`会被转化为`ab`和`cd`
|
||||
- `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 mode,search 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`
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user