analyzer执行将输入字符流分解为token的过程,它一般发生在两个场合:
在indexing的时候,也即在建立索引的时候
在searching的时候,也即在搜索时,分析需要搜索的词语
analysis?
分析是Elasticsearch在文档发送之前对文档正文执行的过程,以添加到反向索引中(inverted index)。 在将文档添加到索引之前,Elasticsearch会为每个分析的字段执行许多步骤:
Character filtering (字符过滤器): 使用字符过滤器转换字符
Breaking text into tokens (把文字转化为标记): 将文本分成一组一个或多个标记
Token filtering:使用标记过滤器转换每个标记
Token indexing:把这些标记存于index中
standard analyzer是Elasticsearch的缺省分析器:
没有 Char Filter
使用standard tokonizer
把字符串变为小写,同时有选择地删除一些stop words等。默认的情况下stop words为_none_,也即不过滤任何stop words。
总体说来一个analyzer可以分为如下的几个部分:
- 0个或1个以上的character filter
 - 1个tokenizer
 - 0个或1个以上的token filter
 
Analyze API
GET /_analyze
POST /_analyze
GET /<index>/_analyze
POST /<index>/_analyze
安装IK中文分词器
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip
查看安装的插件列表
elasticsearch-plugin list
安装完成需要 重新启动一下我们的Elasticsearch,以便这个plugin能装被加载
安装icu
elasticsearch-plugin install analysis-icu
#创建索引
PUT chinese
#指定analyzer
PUT /chinese/_mapping
{
  "properties": {
    "content": {
      "type": "text",
      "analyzer": "ik_max_word",
      "search_analyzer": "ik_smart"
    }
  }
}
#测试分词
GET /chinese/_analyze
{
  "text": "我爱北京天安门",
  "analyzer": "ik_max_word"
}
    PUT /chinese/_doc/1
    {
      "content":"我爱北京天安门"
    }
     
    PUT  /chinese/_doc/2
    {
      "content": "北京,你好"
    }
    
    GET /chinese/_search
    {
      "query": {
        "match": {
          "content": "北京"
        }
      }
    }
    
#测试搜索
GET /chinese/_search
{
  "query": {
    "match": {
      "content": "天安门"
    }
  }
}
    GET /chinese/_search
    {
      "query": {
        "match": {
          "content": "北京天安门"
        }
      }
    }