一、什么是NGram 分词器?
NGram分词器是ES自带的具有前缀匹配搜索功能的一个文本分词器。它能根据文本的步长逐步对写入的文本内容进行约束切割;
二、NGram和index-time搜索推荐原理
搜索的时候,不用再根据一个前缀,然后扫描整个倒排索引了,而是简单的拿前缀去倒排索引中匹配即可,如果匹配上了,那么就好了,就和match query全文检索一样。
官方文档:NGram Tokenizer | Elasticsearch Guide [6.8] | Elastic
官方介绍如下:
在默认设置下,ngram标记器将初始文本视为单个标记,并生成最小长度为1、最大长度为2的N个字符串,这个最大最小长度我们是可以配置的。
例如:
POST _analyze
{
"tokenizer": "ngram",
"text": "Quick Fox"
}
上述句子将产生以下术语:
空格也会进行分词
[ Q, Qu, u, ui, i, ic, c, ck, k, "k ", " ", " F", F, Fo, o, ox, x ]
三 配置参数
The ngram
tokenizer accepts the following parameters:
|
Minimum length of characters in a gram. Defaults to |
|
Maximum length of characters in a gram. Defaults to |
|
Character classes that should be included in a token. Elasticsearch will split on characters that don’t belong to the classes specified. Defaults to 应包含在令牌中的字符类。Elasticsearch将对不属于指定类的字符进行拆分。默认值为[](保留所有字符)。也就是遇到这些字符会进行分词。 Character classes may be any of the following:
|
TIP:将min_gram和max_gram设置为相同的值通常是有意义的。长度越小,匹配的文档越多,但匹配的质量越低。长度越长,匹配的内容就越具体。三克(长度3)是一个很好的起点。
例子:文章来源:https://www.toymoban.com/news/detail-596749.html
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 3,
"max_gram": 3,
"token_chars": [
"letter",
"digit"
]
}
}
}
}
}
POST my_index/_analyze
{
"analyzer": "my_analyzer",
"text": "2 Quick Foxes."
}
分词:文章来源地址https://www.toymoban.com/news/detail-596749.html
[ Qui, uic, ick, Fox, oxe, xes ]
到了这里,关于Elasticsearch 的 NGram 分词器使用技巧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!