基于elasticsearch7.6.1 和 kibana7.6.1

1. 基础介绍

analyzer:插入文档时,将text类型的字段做分词然后插入倒排索引。

search_analyzer:查询时,先对要查询的text类型的输入做分词,再去倒排索引中搜索。

如果想要让'索引'和'查询'时使用不同的分词器,ElasticSearch也是能支持的,只需要在字段上加上search_analyzer参数。索引时,只会去看字段有没有定义analyzer,有定义的话就用定义的,没定义就用es预设的。查询时,会先去看字段有没有定义search_analyzer,如果没有定义,就去看有没有analyzer,再没有定义,才会去使用es预设的

2. 案例

# 创建索引
PUT /mapping_analyzer
{
  "mappings": {
    "dynamic": "strict",
    "properties": {
      "name": {
        "type": "text",
        "analyzer": "standard",
        "search_analyzer": "ik_smart"
      },
      "desc": {
        "type": "text",
        "analyzer": "ik_smart",
        "search_analyzer": "ik_smart"
      }
    }
  }
}


# 添加文档
PUT /mapping_analyzer/_doc/1
{
  "name": "我是中国共产党",
  "desc": "我是中国共产党"
}

# 查询测试 (name字段--索引时使用standard, 查询时使用ik_smart)
GET /mapping_analyzer/_search
{
  "query": {
    "match": {
      "name": "党"
    }
  }
}


GET /mapping_analyzer/_search
{
  "query": {
    "match": {
      "name": "中国共产党"
    }
  }
}


# 查询测试 (desc字段--索引时使用ik_smart, 查询时使用ik_smart)
GET /mapping_analyzer/_search
{
  "query": {
    "match": {
      "desc": "中国共产党"
    }
  }
}

3. ik_smart和standard分词器的区别

# ik_smart分词器
GET _analyze
{
  "analyzer": "ik_smart",
  "text": "我是中国共产党"
}


# standard分词器
GET _analyze
{
  "analyzer": "standard",
  "text": "我是中国共产党"
}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐