如果我用这个分析器(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 { "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "keyword", "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"]
}
答案 0 :(得分:0)
当您定义自定义分析器时,您应该指定"type": "custom"
或忽略type
设置,但这不是一个好习惯,并没有帮助传达您正在做的事情的含义
您也可以指定"type": "standard"
,但前提是您只配置standard
分析器,例如此处我们正在配置english
分析器,但它不是定制的。
"my_english_analyzer": {
"type": "standard",
"max_token_length": 5,
"stopwords": "_english_"
}
因此,您的分析器analyzer_standard_with_html_strip
应为custom
类型。如果您想在standard
分析器中重用custom
分析器但添加字符过滤器,则可以将standard
analyzer重新定义为自定义过滤器,即使用相同的标记器和标记过滤器+添加字符过滤器,如下所示:
"analyzer_standard_with_html_strip": {
"type": "custom",
"tokenizer": "standard", <--- like standard
"filter": [ "standard", "lowercase" ], <--- like standard
"char_filter": ["my_char_filter"] <--- this is custom
}