MST
星途 面试题库

面试题:ElasticSearch中如何设置文本类型字段的映射属性以实现精准搜索和模糊搜索?

在ElasticSearch中,对于一个文本类型的字段,比如一篇文章的内容字段,你需要实现两种搜索功能:一是精准匹配搜索,用户输入完整的一句话能精确找到包含这句话的文档;二是模糊匹配搜索,用户输入几个关键词能找到相关文档。请阐述如何设置该字段的映射属性,并给出简单的示例。
48.6万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

设置映射属性

  1. 精准匹配:使用 keyword 类型来实现精准匹配。keyword 类型不会对输入进行分词,所以可以精确匹配完整的文本。
  2. 模糊匹配:使用 text 类型,并指定合适的分词器。text 类型会对输入进行分词,以便实现模糊匹配。

示例

假设我们有一个索引名为 article_index,包含一个名为 content 的字段,用于存储文章内容。

  1. 创建索引并设置映射
PUT /article_index
{
  "mappings": {
    "properties": {
      "content": {
        "type": "text", 
        "fields": {
          "keyword": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

在上述示例中,content 字段被定义为 text 类型,用于模糊匹配;同时通过 fields 子属性定义了一个 keyword 类型的子字段 content.keyword,用于精准匹配。

  1. 添加文档
POST /article_index/_doc/1
{
  "content": "这是一篇关于计算机技术的文章,主要介绍了ElasticSearch的使用。"
}
  1. 精准匹配搜索
GET /article_index/_search
{
  "query": {
    "term": {
      "content.keyword": "这是一篇关于计算机技术的文章,主要介绍了ElasticSearch的使用。"
    }
  }
}
  1. 模糊匹配搜索
GET /article_index/_search
{
  "query": {
    "match": {
      "content": "计算机技术 ElasticSearch"
    }
  }
}