elasticsearch 边缘ngram令牌筛选器与ngram令牌筛选器有何不同?
由于我是弹性搜索新手,我无法识别ngram令牌过滤器和 边缘ngram令牌过滤器 这两个方面有什么不同 处理代币?我认为这一点非常清楚: 该令牌化器与nGram非常相似,但只保留从令牌开头开始的n-gram
elasticsearch 边缘ngram令牌筛选器与ngram令牌筛选器有何不同?,
elasticsearch,token,analyzer,
elasticsearch,Token,Analyzer,由于我是弹性搜索新手,我无法识别ngram令牌过滤器和 边缘ngram令牌过滤器 这两个方面有什么不同 处理代币?我认为这一点非常清楚: 该令牌化器与nGram非常相似,但只保留从令牌开头开始的n-gram nGramtokenizer的最佳示例来自: 使用此标记器定义: "type" : "nGram", "min_gram" : "2", "max_gram" : "3",
nGram
tokenizer的最佳示例来自:
使用此标记器定义:
"type" : "nGram",
"min_gram" : "2",
"max_gram" : "3",
"token_chars": [ "letter", "digit" ]
简言之:
- 标记器将根据配置创建标记。在本例中:
,FC
,Schalke
04
从输入文本生成最小nGram
大小和最大min\u gram
大小的字符组。基本上,令牌被分割成小块,每个块都锚定在一个角色上(不管这个角色在哪里,它们都会创建块)max\u gram
也会这样做,但块始终从每个标记的开头开始。基本上,块被锚定在标记的开头edengram
对于与上述相同的文本,
edgeNGram
生成以下内容:FC,Sc,Sch,Scha,Schal,04
。文本中的每个“单词”都会被考虑,每个“单词”的第一个字符都是起点(FC
中的F
,S
中的Schalke
和04
中的0
)。ngram
在打断文本的同时移动光标:
Text: Red Wine
Options:
ngram_min: 2
ngram_max: 3
Result: Re, Red, ed, Wi, Win, in, ine, ne
正如您在这里看到的,光标将ngram\u min
移动到下一个片段,直到到达ngram\u max
ngram\u edge
的作用与ngram
完全相同,但它不会移动光标:
Text: Red Wine
Options:
ngram_min: 2
ngram_max: 3
Result: Re, Red
为什么它没有返回Win
?因为光标不移动,所以它总是从零位置开始,移动ngram_min
次,然后返回到相同的位置(始终为零)
将
ngram\u edge
想象成其他编程语言(如JavaScript)中的子字符串
函数:
/ngram
让str=“红酒”;
console.log(str.substring(0,2));//重新
console.log(str.substring(0,3));//红色
console.log(str.substring(1,3));//ed,从位置1开始
// ...
//ngram_边缘
//请注意,位置始终为零
console.log(str.substring(0,2));//重新
console.log(str.substring(0,3));//红色
使用Kibana自己尝试一下:
PUT my_index
{
"settings": {
"analysis": {
"tokenizer": {
"my_ngram_tokenizer" : {
"type" : "ngram",
"min_gram": 2,
"max_gram": 3,
"token_chars": [
"letter",
"digit"
]
},
"my_edge_ngram_tokenizer": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 3
}
}
}
}
}
POST my_index/_analyze
{
"tokenizer": "my_ngram_tokenizer",
"text": "Red Wine"
}
POST my_index/_analyze
{
"tokenizer": "my_edge_ngram_tokenizer",
"text": "Red Wine"
}
我对问题做了一些修改,请考虑更新。我不明白更新的问题。什么不清楚?我的解释甚至代表
令牌过滤器
。我现在明白了。谢谢兄弟。
PUT my_index
{
"settings": {
"analysis": {
"tokenizer": {
"my_ngram_tokenizer" : {
"type" : "ngram",
"min_gram": 2,
"max_gram": 3,
"token_chars": [
"letter",
"digit"
]
},
"my_edge_ngram_tokenizer": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 3
}
}
}
}
}
POST my_index/_analyze
{
"tokenizer": "my_ngram_tokenizer",
"text": "Red Wine"
}
POST my_index/_analyze
{
"tokenizer": "my_edge_ngram_tokenizer",
"text": "Red Wine"
}