elasticsearch 边缘ngram令牌筛选器与ngram令牌筛选器有何不同?,elasticsearch,token,analyzer,elasticsearch,Token,Analyzer" /> elasticsearch 边缘ngram令牌筛选器与ngram令牌筛选器有何不同?,elasticsearch,token,analyzer,elasticsearch,Token,Analyzer" />

elasticsearch 边缘ngram令牌筛选器与ngram令牌筛选器有何不同?

elasticsearch 边缘ngram令牌筛选器与ngram令牌筛选器有何不同?,elasticsearch,token,analyzer,elasticsearch,Token,Analyzer,由于我是弹性搜索新手,我无法识别ngram令牌过滤器和 边缘ngram令牌过滤器 这两个方面有什么不同 处理代币?我认为这一点非常清楚: 该令牌化器与nGram非常相似,但只保留从令牌开头开始的n-gram nGramtokenizer的最佳示例来自: 使用此标记器定义: "type" : "nGram", "min_gram" : "2", "max_gram" : "3",

由于我是弹性搜索新手,我无法识别ngram令牌过滤器和 边缘ngram令牌过滤器

这两个方面有什么不同 处理代币?

我认为这一点非常清楚:

该令牌化器与nGram非常相似,但只保留从令牌开头开始的n-gram

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"
}