And*_*iuk 2 tokenize analyzer n-gram elasticsearch
我在 Mac 上使用 Elastic Search 1.7.1。
这是我的索引映射:
{
"settings":{
"analysis":{
"filter":{
"my_edgengram":{
"max_gram":15,
"token_chars":[
"letter",
"digit"
],
"type":"edgeNGram",
"min_gram":1
},
},
"analyzer":{
"stop_edgengram_analyzer":{
"filter":[
"lowercase",
"asciifolding",
"stop",
"my_edgengram"
],
"type":"custom",
"tokenizer":"whitespace"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
调试分析器:
$ curl -XGET 'http://localhost:9200/objects/_analyze?analyzer=stop_edgengram_analyzer&text=America,s&pretty=True'
{
"tokens" : [
... skipped ...
, {
"token" : "america",
"start_offset" : 0,
"end_offset" : 9,
"type" : "word",
"position" : 1
}, {
"token" : "america,",
"start_offset" : 0,
"end_offset" : 9,
"type" : "word",
"position" : 1
}, {
"token" : "america,s",
"start_offset" : 0,
"end_offset" : 9,
"type" : "word",
"position" : 1
} ]
}
Run Code Online (Sandbox Code Playgroud)
为什么america,s令牌在输出中?
,是标点符号。我希望字母和数字仅在my_edgengram过滤器的token_chars 属性中指定。
您混淆了edge_ngram tokenizer和edge_ngram token filter。
从文档:
分词器用于将字符串分解为术语或标记流。
在有问题的示例中whitespace是正在使用的标记器
另一方面,令牌过滤器:
接受来自标记器的标记流,并且可以修改标记(例如小写)、删除标记(例如删除停用词)或添加标记(例如同义词)。
在 OPegde_ngram令牌过滤器中提供的示例中使用。
token_chars不支持edge_ngram令牌过滤器,因此被忽略。
| 归档时间: |
|
| 查看次数: |
1232 次 |
| 最近记录: |