我想发布一些详细的用例。
边缘 n-gram 分词器(默认)
默认情况下,此标记器将所有文本视为单个标记,因为默认情况下标记可以包含任何字符(包括空格)。
GET {ELASTICSEARCH_URL}/_analyze
{
"tokenizer": "edge_ngram",
"text": "How are you?"
}
结果:
["H", "Ho"]
解释:一个令牌,min_gram = 1,max_gram = 2。
Edge n-gram 分词器(没有 token_chars 的自定义)
PUT {ELASTICSEARCH_URL}/custom_edge_ngram
{
"settings": {
"analysis": {
"analyzer": {
"custom_edge_ngram": {
"tokenizer": "custom_edge_ngram_tokenizer"
}
},
"tokenizer": {
"custom_edge_ngram_tokenizer": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 7
}
}
}
}
}
GET {ELASTICSEARCH_URL}/custom_edge_ngram/_analyze
{
"analyzer": "custom_edge_ngram",
"text": "How old are you?"
}
结果:
["Ho", "How", "How ", "How o", "How ol", "How old"]
解释:还是一个令牌,min_gram = 2,max_gram = 7。
Edge n-gram 分词器(使用 token_chars 自定义)
PUT {ELASTICSEARCH_URL}/custom_edge_ngram_2
{
"settings": {
"analysis": {
"analyzer": {
"custom_edge_ngram": {
"tokenizer": "custom_edge_ngram_tokenizer"
}
},
"tokenizer": {
"custom_edge_ngram_tokenizer": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 7,
"token_chars": ["letter"]
}
}
}
}
}
GET {ELASTICSEARCH_URL}/custom_edge_ngram_2/_analyze
{
"analyzer": "custom_edge_ngram",
"text": "How old are you?"
}
结果:
["Ho", "How", "ol", "old", "ar", "are", "yo", "you"]
解释:4 个标记 How,old,are,you(由于token_chars,标记只能包含字母),min_gram = 2,max_gram = 7,但最大标记句子长度为3。
边缘 n-gram 标记过滤器
Tokenizer 将文本转换为标记流。
令牌过滤器适用于流的每个令牌。
令牌过滤器可以通过添加、更新、删除令牌来修改流。
让我们使用standard 分词器。
GET {ELASTICSEARCH_URL}/_analyze
{
"tokenizer": "standard",
"text": "How old are you?"
}
结果:
["How", "old", "are", "you"]
现在让我们添加令牌过滤器。
GET {ELASTICSEARCH_URL}/_analyze
{
"tokenizer": "standard",
"filter": [
{ "type": "edge_ngram",
"min_gram": 2,
"max_gram": 7
}
],
"text": "How old are you?"
}
结果:
["Ho", "How", "ol", "old", "ar", "are", "yo", "you"]
说明:edge_nram 对应每个令牌。