自定义分析器

原文链接 : https://www.elastic.co/guide/en/elasticsearch/reference/5.3/analysis-custom-analyzer.html(修改该链接为官网对应的链接)

译文链接 : http://www.apache.wiki/display/Elasticsearch/analysis-custom-analyzer.html(修改该链接为 ApacheCN 对应的译文链接)

贡献者 : ╮欠n1的太多ApacheCNApache中文网

当内置分析器不能满足您的需求时,您可以创建一个custom分析器,它使用以下相应的组合:

配置

custom(自定义)分析器接受以下的参数:

| tokenizer | 内置或定制的标记器。 (需要) | | char_filter | 内置或自定义字符过滤器的可选阵列。 | | filter | 可选的内置或定制token过滤器阵列。 | | position_increment_gap | 在索引文本值数组时,Elasticsearch会在一个值的最后一个值和下一个值的第一个项之间插入假的“间隙”,以确保短语查询与不同数组元素的两个术语不匹配。 默认为100.有关更多信息,请参阅position_increment_gap。 |

配置示例

以下是一个结合以下内容的示例:

字符过滤器

分词器

Token 分析器

  1. PUT my_index
  2. {
  3. "settings": {
  4. "analysis": {
  5. "analyzer": {
  6. "my_custom_analyzer": {
  7. "type": "custom",
  8. "tokenizer": "standard",
  9. "char_filter": [
  10. "html_strip"
  11. ],
  12. "filter": [
  13. "lowercase",
  14. "asciifolding"
  15. ]
  16. }
  17. }
  18. }
  19. }
  20. }
  21. POST my_index/_analyze
  22. {
  23. "analyzer": "my_custom_analyzer",
  24. "text": "Is this <b>déjà vu</b>?"
  25. }
  1. 上述句子将产生以下词语:
  1. [ is, this, deja, vu ]

前面的例子使用了默认配置的tokenizer,令牌过滤器和字符过滤器,但是可以创建每个配置的版本并在自定义分析器中使用它们。以下是一个比较复杂的例子:

字符过滤器

分词器

Token 分析器

示例

  1. PUT my_index
  2. {
  3. "settings": {
  4. "analysis": {
  5. "analyzer": {
  6. "my_custom_analyzer": {
  7. "type": "custom",
  8. "char_filter": [
  9. "emoticons"
  10. ],
  11. "tokenizer": "punctuation",
  12. "filter": [
  13. "lowercase",
  14. "english_stop"
  15. ]
  16. }
  17. },
  18. "tokenizer": {
  19. "punctuation": {
  20. "type": "pattern",
  21. "pattern": "[ .,!?]"
  22. }
  23. },
  24. "char_filter": {
  25. "emoticons": {
  26. "type": "mapping",
  27. "mappings": [
  28. ":) => _happy_",
  29. ":( => _sad_"
  30. ]
  31. }
  32. },
  33. "filter": {
  34. "english_stop": {
  35. "type": "stop",
  36. "stopwords": "_english_"
  37. }
  38. }
  39. }
  40. }
  41. }
  42. POST my_index/_analyze
  43. {
  44. "analyzer": "my_custom_analyzer",
  45. "text": "I'm a :) person, and you?"
  46. }

| 自定义分析器 - 图1 | 表情符号字符过滤器,标点符号化器和english_stop令牌过滤器是在相同索引设置中定义的自定义实现。 |

以上示例产生以下词语:

  1. [ i'm, _happy_, person, you ]