Home Articles

分析器定义中的类型字段

Asked
Viewed 1237 times
0

如果我用这个分析器(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 Answer

  • 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 类型 . 如果要在 custom 分析器中重用 standard 分析器但添加字符过滤器,则可以将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 
    }
    

Related