分析器定义中的类型字段

时间:2018-03-29 15:07:21

标签: elasticsearch

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

1 个答案:

答案 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 
}