analyzer

定义文本字段分词器,默认对索引和查询都是有效的。

假设不使用任何分词器,创建索引并添加字段

PUT blog

PUT blog/_doc/1
{
  "title": "定义文本字段分词器,默认对索引和查询都是有效的。"
}

查看词条向量(term vectors),即分词结果:

GET /blog/_termvectors/1
{
  "fields": ["title"]
}

发现默认是按照单个汉字分词的。

所以,我们要根据实际情况,配置合适的分词器:

PUT blog
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "analyzer": "ik_smart"
      }
    }
  }
}

search_analyzer

查询时候的分词器,默认情况下,索引阶段和查询阶段都使用analyzer配置的分词器,如果配置了search_analyzer,则在查询时使用search_analyzer指定的分词器。如果analyzer也没配置,则使用ES默认的分词器。

normalizer

normalizer参数用于解析前(索引或者查询阶段)的标准化配置。配置如下:

PUT blog
{
  "settings": {
    "analysis": {
      "normalizer": {
        "my_normalizer": {
          "type": "custom",
          "filter": ["lowercase"]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "author": {
        "type": "keyword",
        "normalizer": "my_normalizer"
      }
    }
  }
}

上面的例子定义了一个normalizer,用于将所有文本都转化为小写字母。定义的normalizer可以在mappings中使用。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐