【发布时间】:2019-02-06 13:25:52
【问题描述】:
我对 ElasticSearch 映射有疑问。
例如字段name 的映射是:
{
"name": {
"type": "keyword",
"fields": {
"ngram": {
"type": "text",
"analyzer": "ngram_analyzer",
"search_analyzer": "ngram_analyzer"
},
"word": {
"type": "text",
"analyzer": "word_analyzer",
"search_analyzer": "word_analyzer"
}
}
}
}
除了search_analyzer 之外,整个映射都有效,ElasticSearch 似乎忽略了这一点。
分析设置:
{
"analysis":{
"analyzer":{
"ngram_analyzer":{
"type":"custom",
"char_filter":[
"number_char_filter_map",
"remove_duplicates"
],
"tokenizer":"ngram_tokenizer_whitespace",
"filter":[
"lowercase",
"english_stop"
]
},
"word_analyzer":{
"type":"custom",
"char_filter":[
"number_char_filter_map",
"remove_duplicates"
],
"tokenizer":"word_tokenizer",
"filter":[
"lowercase",
"english_stop"
]
}
},
"char_filter":{
"remove_duplicates":{
"type":"pattern_replace",
"pattern":"(.)(?=\\1)",
"replacement":""
},
"remove_white_spaces":{
"type":"pattern_replace",
"pattern":"(\s)",
"replacement":""
}
},
"filter":{
"english_stop":{
"type":"stop",
"ignore_case":true,
"stopwords":"_english_"
}
},
"tokenizer":{
"ngram_tokenizer":{
"type":"ngram",
"min_gram":2,
"max_gram":7
},
"ngram_tokenizer_whitespace":{
"type":"ngram",
"min_gram":2,
"max_gram":7,
"token_chars":[
"letter",
"digit",
"punctuation",
"symbol"
]
},
"word_tokenizer":{
"type":"standard"
}
}
}
}
根据 ElasticSearch 文档,我没有在字段中找到 search_analyzer 的任何定义。如果此方法不起作用,是否有任何替代结构来包含搜索分析器?
【问题讨论】:
-
这个怎么样? elastic.co/guide/en/elasticsearch/reference/current/… 是什么让你觉得
... ElasticSearch ignores that? -
@Val 谢谢。但这是一个带有单个分析器的普通字段,我需要的是带有多个分析器的多个字段,以获得更好的搜索结果。这种方式仅适用于 one 字段。并且通过这种方式,我必须多次克隆一个字段,这会影响结果的 _source 属性,这不是一个好看的结果。我在不接受 search_analyzer 的属性中遇到 fields 问题。
-
@Val 你有什么解决办法吗?如果您能分享您的想法,我将不胜感激
标签: elasticsearch analyzer elasticsearch-6 elasticsearch-analyzers