如果我用这个分析器(C#)定义我的索引:
settings = new
{
index = new
{
number_of_shards = 1,
number_of_replicas = 1,
analysis = new
{
analyzer = new
{
analyzer_standard_with_html_strip = new
{
type = "standard",
char_filter = new string[] { "html_strip" },
stopwords = "_english_"
},
类型字段有什么作用?它是否基于标准分析仪的分析仪?如果我根本没有类型线它似乎工作 . 这个,从https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-htmlstrip-charfilter.html,似乎暗示你不需要它:
在此示例中,我们配置html_strip字符过滤器以保留标记:PUT my_index
{
“设置”:{
“分析”:{
“analyzer”:{
“my_analyzer”:{
“tokenizer”:“关键字”,
“char_filter”:[“my_char_filter”]
}
},
“char_filter”:{
“my_char_filter”:{
“type”:“html_strip”,
“escaped_tags”:[“b”]
}
}
}
}
}
在那里,分析仪没有指定类型 . 不应该是“定制”吗?
那么,当您定义分析器时,类型字段会起什么作用?有什么区别
"my_analyzer": {
"type": "standard",
"tokenizer": "keyword",
"char_filter": ["my_char_filter"]
}
和
"my_analyzer": {
"type": "custom",
"tokenizer": "keyword",
"char_filter": ["my_char_filter"]
}
和
"my_analyzer": {
"tokenizer": "keyword",
"char_filter": ["my_char_filter"]
}
?
1 回答
当您定义自定义分析器时,您应该指定
"type": "custom"
或忽略type
设置,但它有助于传达您正在做的事情的含义 .您也可以指定
"type": "standard"
,但仅当您只配置standard
分析器时,例如此处我们正在配置english
分析器,但它不是自定义分析器 .因此,您的分析仪
analyzer_standard_with_html_strip
应为custom
类型 . 如果要在custom
分析器中重用standard
分析器但添加字符过滤器,则可以将standard analyzer重新定义为自定义过滤器,即使用相同的标记器和标记过滤器添加字符过滤器,如下所示: