弹性搜索忽略“token_chars”
Elastic Search ignores `token_chars`
我在 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"
}
}
}
}
}
调试分析器:
$ 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
} ]
}
为什么 america,s
令牌在输出中?
,
是标点符号。我希望字母和数字仅在 my_edgengram
过滤器的 token_chars 属性 中指定。
你在混淆 edge_ngram tokenizer and edge_ngram token filter。
来自文档:
Tokenizers are used to break a string down into a stream of terms or
tokens.
在问题提供的示例中,whitespace
是正在使用的分词器
另一方面,令牌过滤器:
accept a stream of tokens from a tokenizer and can
modify tokens (eg lowercasing), delete tokens (eg remove stopwords) or
add tokens (eg synonyms).
在 OP egde_ngram
中提供的示例中使用了令牌过滤器。
token_chars
不支持 edge_ngram
标记过滤器,因此被忽略。
我在 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"
}
}
}
}
}
调试分析器:
$ 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
} ]
}
为什么 america,s
令牌在输出中?
,
是标点符号。我希望字母和数字仅在 my_edgengram
过滤器的 token_chars 属性 中指定。
你在混淆 edge_ngram tokenizer and edge_ngram token filter。
来自文档:
Tokenizers are used to break a string down into a stream of terms or tokens.
在问题提供的示例中,whitespace
是正在使用的分词器
另一方面,令牌过滤器:
accept a stream of tokens from a tokenizer and can modify tokens (eg lowercasing), delete tokens (eg remove stopwords) or add tokens (eg synonyms).
在 OP egde_ngram
中提供的示例中使用了令牌过滤器。
token_chars
不支持 edge_ngram
标记过滤器,因此被忽略。