Elasticsearch 在Mapping中指定 analyzer索引分词器和search_analyzer搜索分词器

2,202 阅读1分钟

1. Elasticsearch中分词器选择和默认

分词器,影响搜索结果,如果搜索无法命中,可以采用提取词干的方式,增加搜索的recall值,比如在英文搜索中,可以设置分词器为英文分词器。分词器有索引时的分词器及搜索时的分词器,可以在mapping中设置,索引分词器采用analyzer进行设置,搜索分词器采用search_analyzer设置,如果没有设置分词器,则索引和搜索分词器都用默认的standard分词器,如果只是设置索引分词器没有设置搜索分词器,则搜索分词器也采用索引分词器,如果analyzer和search_analyzer都设置则使用各自设置的分词器。

2. 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"
      }
    }
  }
}

3. search_analyzer

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

PUT my_index
{
  "mappings": {
    "doc": {
      "properties": {
        "uid": {
          "type": "keyword"
        },
        "name": {
          "type": "text",
          "analyzer": "english",
          "search_analyzer": "standard"
        }
      }
    }
  }
}

配置了索引分词器为 english 查询分词器为standard分词器。

原文链接:blog.csdn.net/liangwenmai…