ngram弹性搜索
ngram elasticsearch
curl -XPUT 'http://localhost:9200/testsoundi' -d '{ "settings": {
"analysis": {
"analyzer": {
"my_edge_ngram_analyzer": {
"tokenizer": "my_edge_ngram_tokenizer"
}
},
"tokenizer": {
"my_edge_ngram_tokenizer": {
"type": "edgeNGram", "min_gram" : "2", "max_gram" : "5",
"token_chars": ["letter", "digit","whitespace"]
}
}
}
}
}'
soundarya@soundarya-VirtualBox:~/Downloads/elasticsearch-2.4.0/bin$ curl 'localhost:9200/testsoundi/_analyze?pretty=1&analyzer=my_edge_ngram_analyzer' -d 'wonder'
但我得到的输出是 wo、won、wond 等。如果我将 max_gram 设为 3,我只会得到第三个字母 ('wo'、'won')
I am expecting output like:
won
ond
nde
der
谁能帮我解决这个问题?
干得好,你快完成了。首先,您需要一个 nGram
分词器,而不是 edgeNGram
。不同之处在于后者只会从单词的开头开始标记,而前者会创建所需长度的所有可能标记,而不管单词中的位置如何。
其次,如果您需要长度为 3 的标记,min_gram
和 max_gram
需要为 3。
curl -XPUT 'http://localhost:9200/testsoundi' -d '{
"settings": {
"analysis": {
"analyzer": {
"my_ngram_analyzer": {
"tokenizer": "my_ngram_tokenizer"
}
},
"tokenizer": {
"my_ngram_tokenizer": {
"type": "nGram",
"min_gram": "3",
"max_gram": "3",
"token_chars": [
"letter",
"digit",
"whitespace"
]
}
}
}
}
}
'
curl -XPUT 'http://localhost:9200/testsoundi' -d '{ "settings": {
"analysis": {
"analyzer": {
"my_edge_ngram_analyzer": {
"tokenizer": "my_edge_ngram_tokenizer"
}
},
"tokenizer": {
"my_edge_ngram_tokenizer": {
"type": "edgeNGram", "min_gram" : "2", "max_gram" : "5",
"token_chars": ["letter", "digit","whitespace"]
}
}
}
}
}'
soundarya@soundarya-VirtualBox:~/Downloads/elasticsearch-2.4.0/bin$ curl 'localhost:9200/testsoundi/_analyze?pretty=1&analyzer=my_edge_ngram_analyzer' -d 'wonder'
但我得到的输出是 wo、won、wond 等。如果我将 max_gram 设为 3,我只会得到第三个字母 ('wo'、'won')
I am expecting output like:
won
ond
nde
der
谁能帮我解决这个问题?
干得好,你快完成了。首先,您需要一个 nGram
分词器,而不是 edgeNGram
。不同之处在于后者只会从单词的开头开始标记,而前者会创建所需长度的所有可能标记,而不管单词中的位置如何。
其次,如果您需要长度为 3 的标记,min_gram
和 max_gram
需要为 3。
curl -XPUT 'http://localhost:9200/testsoundi' -d '{
"settings": {
"analysis": {
"analyzer": {
"my_ngram_analyzer": {
"tokenizer": "my_ngram_tokenizer"
}
},
"tokenizer": {
"my_ngram_tokenizer": {
"type": "nGram",
"min_gram": "3",
"max_gram": "3",
"token_chars": [
"letter",
"digit",
"whitespace"
]
}
}
}
}
}
'