ES 自定义分析器

分析器定义

一个分析器是组合了三种函数的包装器,三个函数按以下顺序执行:

  • 字符过滤器 处理初始输入的字符串,可以过滤掉特定的字符,或者转换成自定义的字符
  • 分词器 分词器把字符串分成单个词条,一个分析器必须有一个唯一的分词器
  • 词单元过滤器 词条按顺序通过词单元过滤器,词单元过滤器可以修改,添加或者移除词条。例如:lowercase过滤器,会把字母全部转换为小写。

自定义分析器

在 analysis 下的相应位置设置字符过滤器、分词器和词单元过滤器,格式为:

PUT /my_index
{
    "settings": {
        "analysis": {
            "char_filter": { ... 字符过滤器 ... },
            "tokenizer":   { ...   分词器    ... },
            "filter":      { ...   词单元过滤器   ... },
            "analyzer":    { ...   分析器      ... }
        }
    }
} 
复制代码

实际应用中的定义:

{
  "analysis": {
    "tokenizer": {
      "filter": {
        "my_stopwords": {
          "type": "stop",
          "stopwords": [
            "the",
            "a"
          ]
        }
      },
      "trigram_tokenizer": {
        "type": "ngram",
        "min_gram": 1,
        "max_gram": 3,
        "token_chars": [
          "letter",
          "digit"
        ]
      }
    },
    "analyzer": {
      "trigram_analyzer": {
        "tokenizer": "trigram_tokenizer",
        "filter": [
          "lowercase",“my_stopwords”
        ]
      }
    }
  }
}
复制代码

定义一个分析器trigram_analyzer,采用分词器tokenizer,采用ngram作为此单元过滤器,字符过滤器只保留字母letter 和数字digit,并转换为小写字母lowercase,去掉the 和a

`

转载于:https://juejin.im/post/5bc6ef03f265da0ae472b477

你可能感兴趣的:(php,java)