内建分析器参考

目录

概述

指纹分析器(Fingerprint Analyzer)

输出示例

配置

示例配置

定义

分词器

标记过滤器(按顺序)

关键词分析器(Keyword analyzer)

输出示例

配置

定义

分词器

语言分析器(Language analyzers)

配置语言分析器

停用词

排除词干处理的词

重新实现语言分析器

模式分析器(Pattern analyzer)

示例输出

配置

示例配置

CamelCase分词器

定义

分词器

标记过滤器

简单分析器(Simple analyzer)

输出示例

定义

分词器

定制化

标准分析器(Standard analyzer)

示例输出

配置

配置示例

定义

分词器

标记过滤器

停用词分析器(Stop analyzer)

示例输出

配置

示例配置

定义

分词器

标记过滤器

空格分析器(Whitespace analyzer)

输出示例

配置

定义

分词器


概述

Elasticsearch自带多种内置分析器,可以在任何索引中使用而无需进一步配置:

  • 标准分析器(Standard Analyzer

    标准分析器根据Unicode文本分割算法将文本划分为单词。它删除大多数标点符号,将术语转换为小写,并支持删除停用词。

  • 简单分析器(Simple Analyzer

    简单分析器在遇到非字母字符时将文本划分为术语。它将所有术语转换为小写。

  • 空格分析器(Whitespace Analyzer

    空格分析器在遇到任何空格字符时将文本划分为术语。它不将术语转换为小写。

  • 停用词分析器(Stop Analyzer

    停用词分析器类似于简单分析器,但还支持删除停用词。

  • 关键词分析器(Keyword Analyzer

    关键词分析器是一个“空操作”分析器,接受任何文本并以与输入相同的文本输出为单个术语。

  • 模式分析器(Pattern Analyzer

    模式分析器使用正则表达式将文本拆分为术语。它支持大小写转换和停用词。

  • 语言分析器(Language Analyzers

    Elasticsearch提供许多语言特定的分析器,如英语或法语。

  • 指纹分析器(Fingerprint Analyzer

    指纹分析器是一种专业分析器,用于创建可以用于重复检测的指纹。

如果您找不到适合您需求的分析器,您可以创建一个自定义分析器,其中结合了适当的字符过滤器、分词器和标记过滤器。

指纹分析器(Fingerprint Analyzer

指纹分析器实现了一个指纹算法,该算法被OpenRefine项目用于辅助聚类。

输入文本被转换为小写,规范化以删除扩展字符,排序、去重,并连接成一个单一的标记。如果配置了停用词列表,还将删除停用词。

输出示例

POST _analyze
{
  "analyzer": "fingerprint",
  "text": "Yes yes, Gödel said this sentence is consistent and."
}

上述句子将生成以下单一术语:

[ and consistent godel is said sentence this yes ]

配置

指纹分析器接受以下参数:

separator用于连接术语的字符。默认为一个空格。
max_output_size要生成的最大标记大小。默认为255。超过此大小的标记将被丢弃。
stopwords预定义的停用词列表,如_english_,或包含停用词列表的数组。默认为_none_。
stopwords_path包含停用词的文件路径。

有关停用词配置的更多信息,请参阅停用词标记过滤器

示例配置

在这个例子中,我们配置指纹分析器使用预定义的英语停用词列表:

PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_fingerprint_analyzer": {
          "type": "fingerprint",
          "stopwords": "_english_"
        }
      }
    }
  }
}

POST my-index-000001/_analyze
{
  "analyzer": "my_fingerprint_analyzer",
  "text": "Yes yes, Gödel said this sentence is consistent and."
}

上述例子生成以下术语:

[ consistent godel said sentence yes ]

定义

指纹分词器由以下组成:

分词器

标记过滤器(按顺序)

如果您需要在配置参数之外定制指纹分析器,那么您需要将其重新创建为自定义分析器并进行修改,通常是通过添加标记过滤器。这将重新创建内置的指纹分析器,并可作为进一步定制的起点使用:

PUT /fingerprint_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "rebuilt_fingerprint": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "asciifolding",
            "fingerprint"
          ]
        }
      }
    }
  }
}

关键词分析器(Keyword analyzer

关键词分析器是一个“空操作”分析器,它将整个输入字符串作为单个标记返回。

输出示例

POST _analyze
{
  "analyzer": "keyword",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

上述句子将生成以下单一术语:

[ The 2 QUICK Brown-Foxes jumped over the lazy dog's bone. ]

配置

Keyword analyzer 不可配置。

定义

分词器

  • 关键词分词器

如果您需要定制关键词分析器,那么您需要将其重新创建为自定义分析器并进行修改,通常是通过添加标记过滤器。通常情况下,当您希望字符串不被分割成标记时,应优先选择关键词类型。但如果您需要,这将重新创建内置的关键词分析器,您可以将其用作进一步定制的起点:

PUT /keyword_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "rebuilt_keyword": {
          "tokenizer": "keyword",
          "filter": [         
          ]
        }
      }
    }
  }
}

语言分析器(Language analyzers

一组旨在分析特定语言文本的分析器。支持以下类型:阿拉伯语、亚美尼亚语、巴斯克语、孟加拉语、巴西葡萄牙语、保加利亚语、加泰罗尼亚语、CJK(中日韩)语言、捷克语、丹麦语、荷兰语、英语、爱沙尼亚语、芬兰语、法语、加利西亚语、德语、希腊语、印地语、匈牙利语、印度尼西亚语、爱尔兰语、意大利语、拉脱维亚语、立陶宛语、挪威语、波斯语、葡萄牙语、罗马尼亚语、俄语、索拉尼语、西班牙语、瑞典语、土耳其语、泰语。

配置语言分析器

停用词

所有分析器都支持在配置中内部设置自定义停用词,或通过设置stopwords_path来使用外部停用词文件。详细信息请参见停用词分析器。

排除词干处理的词

stem_exclusion参数允许您指定一个小写单词数组,这些单词不应进行词干处理。在内部,此功能通过添加关键词标记过滤器来实现,其中关键词设置为stem_exclusion参数的值。

以下分析器支持设置自定义stem_exclusion列表:阿拉伯语、亚美尼亚语、巴斯克语、孟加拉语、保加利亚语、加泰罗尼亚语、捷克语、荷兰语、英语、芬兰语、法语、加利西亚语、德语、印度语、匈牙利语、印尼语、爱尔兰语、意大利语、拉脱维亚语、立陶宛语、挪威语、葡萄牙语、罗马尼亚语、俄语、索拉尼语、西班牙语、瑞典语、土耳其语。

重新实现语言分析器

内置语言分析器可以被重新实现为自定义分析器(如下所述),以定制其行为。

⚠️ 如果您不打算排除词语不进行词干处理(相当于上面的stem_exclusion参数),则应从自定义分析器配置中删除keyword_marker标记过滤器。

详细语言分析器参考原文,这里不赘述。

模式分析器(Pattern analyzer)

模式分析器使用正则表达式将文本拆分为术语。正则表达式应该匹配标记分隔符而不是标记本身。默认情况下,正则表达式为\\W+(或所有非单词字符)。

⚠️ 谨防病态正则表达式

模式分析器使用Java正则表达式。

糟糕编写的正则表达式可能运行非常缓慢,甚至可能引发StackOverflowError,并导致其运行的节点突然退出。详细了解有关病态正则表达式及如何避免的信息

示例输出

POST _analyze
{
  "analyzer": "pattern",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

上述句子将生成以下单一术语:

[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]

配置

模式分析器接受以下参数:

pattern一个Java正则表达式,默认为\W+。
flagsJava正则表达式标志。标志应以竖线分隔,例如"CASE_INSENSITIVE
lowercase术语是否应该转换为小写。默认为true。
stopwords预定义的停用词列表,如_english_,或包含停用词列表的数组。默认为_none_。
stopwords_path包含停用词的文件路径。

有关停用词配置的更多信息,请参阅停用词标记过滤器

示例配置

在这个例子中,我们配置模式分析器,使用非单词字符或下划线(\W|_)来分割电子邮件地址,并将结果转换为小写:

PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_email_analyzer": {
          "type":      "pattern",
          "pattern":   "\\\\W|_", 
          "lowercase": true
        }
      }
    }
  }
}

POST my-index-000001/_analyze
{
  "analyzer": "my_email_analyzer",
  "text": "John_Smith@foo-bar.com"
}

上述例子生成以下术语:

[ john, smith, foo, bar, com ]

CamelCase分词器

以下是一个更复杂的例子,将CamelCase文本拆分为标记:

PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "camel": {
          "type": "pattern",
          "pattern": "([^\\\\p{L}\\\\d]+)|(?<=\\\\D)(?=\\\\d)|(?<=\\\\d)(?=\\\\D)|(?<=[\\\\p{L}&&[^\\\\p{Lu}]])(?=\\\\p{Lu})|(?<=\\\\p{Lu})(?=\\\\p{Lu}[\\\\p{L}&&[^\\\\p{Lu}]])"
        }
      }
    }
  }
}

GET my-index-000001/_analyze
{
  "analyzer": "camel",
  "text": "MooseX::FTPClass2_beta"
}

上述例子生成以下术语:

[ moose, x, ftp, class, 2, beta ]

上述正则表达式更容易理解,可以表示为:

([^\\p{L}\\d]+)                 # swallow non letters and numbers,
| (?<=\\D)(?=\\d)                 # or non-number followed by number,
| (?<=\\d)(?=\\D)                 # or number followed by non-number,
| (?<=[ \\p{L} && [^\\p{Lu}]])    # or lower case
  (?=\\p{Lu})                    #   followed by upper case,
| (?<=\\p{Lu})                   # or upper case
  (?=\\p{Lu}                     #   followed by upper case
    [\\p{L}&&[^\\p{Lu}]]          #   then lower case
  )

定义

模式匹配分词器有如下构成:

分词器

  • 模式分词器

标记过滤器

  • 小写标记过滤器
  • 停用词标记过滤器(默认情况下禁用)

如果您需要超出配置参数的自定义模式分析器,那么您需要将其重新创建为自定义分析器并进行修改,通常是通过添加标记过滤器。这将重新创建内置的模式分析器,您可以将其用作进一步定制的起点:

PUT /pattern_example
{
  "settings": {
    "analysis": {
      "tokenizer": {
        "split_on_non_word": {
          "type":       "pattern",
          "pattern":    "\\\\W+" 
        }
      },
      "analyzer": {
        "rebuilt_pattern": {
          "tokenizer": "split_on_non_word",
          "filter": [
            "lowercase"       
          ]
        }
      }
    }
  }
}

简单分析器(Simple analyzer

简单分析器将文本在任何非字母字符处拆分为标记,如数字、空格、连字符和撇号,丢弃非字母字符,并将大写字母转换为小写。

输出示例

POST _analyze
{
  "analyzer": "simple",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

简单分析器解析句子并生成以下标记:

[ the, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]

定义

简单分析器由一个分词器定义:

分词器

定制化

要定制简单分析器,复制它以创建自定义分析器的基础。然后,可以根据需要修改此自定义分析器,通常是通过添加标记过滤器。

PUT /my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_simple_analyzer": {
          "tokenizer": "lowercase",
          "filter": [                          
          ]
        }
      }
    }
  }
}

标准分析器(Standard analyzer)

标准分析器是默认分析器,如果没有指定分析器,则会使用它。它提供基于语法的分词(基于Unicode文本分割算法,如Unicode标准附录#29中所述),适用于大多数语言。

示例输出

POST _analyze
{
  "analyzer": "standard",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

上述句子将生成以下单一术语:

[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog's, bone ]

配置

标准分析器接受以下参数:

max_token_length最大标记长度。如果看到的标记超过此长度,则在max_token_length间隔处拆分。默认为255。
stopwords预定义的停用词列表,如_english_,或包含停用词列表的数组。默认为_none_。
stopwords_path包含停用词的文件路径。

配置示例

在这个例子中,我们配置标准分析器,将max_token_length设置为5(仅用于演示目的),并使用预定义的英语停用词列表:

PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_english_analyzer": {
          "type": "standard",
          "max_token_length": 5,
          "stopwords": "_english_"
        }
      }
    }
  }
}

POST my-index-000001/_analyze
{
  "analyzer": "my_english_analyzer",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

上述例子生成以下术语:

[ 2, quick, brown, foxes, jumpe, d, over, lazy, dog's, bone ]

定义

标准分析器由以下组成:

分词器

  • 标准分词器

标记过滤器

  • 小写标记过滤器
  • 停用词标记过滤器(默认情况下禁用)

如果您需要超出配置参数的自定义标准分析器,那么您需要将其重新创建为自定义分析器并进行修改,通常是通过添加标记过滤器。这将重新创建内置的标准分析器,并可用作进一步定制的起点:

PUT /standard_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "rebuilt_standard": {
          "tokenizer": "standard",
          "filter": [
            "lowercase"       
          ]
        }
      }
    }
  }
}

停用词分析器(Stop analyzer

停用词分析器与简单分析器相同,但增加了对移除停用词的支持。默认使用_english_停用词。

示例输出

POST _analyze
{
  "analyzer": "stop",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

上述句子将生成以下术语:

[ quick, brown, foxes, jumped, over, lazy, dog, s, bone ]

配置

停用词分析器接受以下参数:

stopwords预定义的停用词列表,如_english_,或包含停用词列表的数组。默认为_english_。
stopwords_path包含停用词的文件路径。此路径相对于Elasticsearch配置目录。

示例配置

在这个例子中,我们配置停用词分析器使用指定的词列表作为停用词:

PUT my-index-000001
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_stop_analyzer": {
          "type": "stop",
          "stopwords": ["the", "over"]
        }
      }
    }
  }
}

POST my-index-000001/_analyze
{
  "analyzer": "my_stop_analyzer",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

上述例子生成以下术语:

[ quick, brown, foxes, jumped, lazy, dog, s, bone ]

定义

停用词分析器有如下组成:

分词器

标记过滤器

如果您需要在配置参数之外定制停用词分析器,那么您需要将其重新创建为自定义分析器并进行修改,通常是通过添加标记过滤器。这将重新创建内置的停用词分析器,您可以将其用作进一步定制的起点:

PUT /stop_example
{
  "settings": {
    "analysis": {
      "filter": {
        "english_stop": {
          "type":       "stop",
          "stopwords":  "_english_" 
        }
      },
      "analyzer": {
        "rebuilt_stop": {
          "tokenizer": "lowercase",
          "filter": [
            "english_stop"          
          ]
        }
      }
    }
  }
}

空格分析器(Whitespace analyzer

空格分析器将文本在遇到空格字符时拆分为术语。

输出示例

POST _analyze
{
  "analyzer": "whitespace",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

上述句子将生成以下术语:

[ The, 2, QUICK, Brown-Foxes, jumped, over, the, lazy, dog's, bone. ]

配置

不可配置

定义

分词器

如果您需要在配置参数之外定制空格分析器,那么您需要将其重新创建为自定义分析器并进行修改,通常是通过添加标记过滤器。这将重新创建内置的空格分析器,您可以将其用作进一步定制的起点:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值