加载中

创建自定义分析器

当内置分析器无法满足您的需求时,您可以创建一个 custom 分析器,它使用了以下组件的适当组合:

custom 分析器接受以下参数:

类型
分析器类型。接受 内置分析器类型。对于自定义分析器,请使用 custom 或省略此参数。
tokenizer
一个内置或自定义的 分词器。(必填)
char_filter
一个可选的内置或自定义 字符过滤器 数组。
filter
一个可选的内置或自定义 词元过滤器 数组。
position_increment_gap
在索引文本值数组时,Elasticsearch 会在某个值的最后一个词项与下一个值的第一个词项之间插入一个伪“间隙”,以确保短语查询不会匹配来自不同数组元素的两个词项。默认为 100。有关更多信息,请参阅 position_increment_gap

这是一个结合了以下组件的示例:

字符过滤器
分词器
标记过滤器
				PUT my-index-000001
					{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "char_filter": [
            "html_strip"
          ],
          "filter": [
            "lowercase",
            "asciifolding"
          ]
        }
      }
    }
  }
}
				POST my-index-000001/_analyze
					{
  "analyzer": "my_custom_analyzer",
  "text": "Is this <b>déjà vu</b>?"
}
		
  1. 对于 custom 分析器,请将 type 设置为 custom 或省略 type 参数。

上面的示例会产生以下词条

[ is, this, deja, vu ]
		

前面的示例使用了采用默认配置的分词器、词元过滤器和字符过滤器,但也可以创建它们各自的配置版本,并在自定义分析器中使用它们。

这是一个结合了以下组件的更复杂的示例:

字符过滤器
分词器
标记过滤器

这是一个示例

				PUT my-index-000001
					{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_custom_analyzer": {
          "char_filter": [
            "emoticons"
          ],
          "tokenizer": "punctuation",
          "filter": [
            "lowercase",
            "english_stop"
          ]
        }
      },
      "tokenizer": {
        "punctuation": {
          "type": "pattern",
          "pattern": "[ .,!?]"
        }
      },
      "char_filter": {
        "emoticons": {
          "type": "mapping",
          "mappings": [
            ":) => _happy_",
            ":( => _sad_"
          ]
        }
      },
      "filter": {
        "english_stop": {
          "type": "stop",
          "stopwords": "_english_"
        }
      }
    }
  }
}
				POST my-index-000001/_analyze
					{
  "analyzer": "my_custom_analyzer",
  "text": "I'm a :) person, and you?"
}
		
  1. 为索引分配一个默认的自定义分析器 my_custom_analyzer。该分析器使用了在请求稍后定义的自定义分词器、字符过滤器和词元过滤器。此分析器也省略了 type 参数。
  2. 定义自定义 punctuation 分词器。
  3. 定义自定义 emoticons 字符过滤器。
  4. 定义自定义 english_stop 词元过滤器。

上面的示例会产生以下词条

[ i'm, _happy_, person, you ]
		
© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.