ElasticSearch备考 -- Multi field

一、题目

Create the index `hamlet_2` with one primary shard and no replicas

Copy the mapping of `hamlet_1` into `hamlet_2`, but also define a multi-field for `speaker`. The name of such multi-field is `tokens` and its data type is the (default) analysed string

Reindex `hamlet_1` to `hamlet_2`

`hamlet_1` index mapping

{

"line_number": "text",

"speaker": "text",

"text_entry": "text"

}

Verify that full-text queries on "speaker.tokens" are enabled on `hamlet_2` by running the following command:

GET hamlet_2/_search

{

"query": {

"match": { "speaker.tokens": "hamlet" }

}

}

二、思考

我们来分析一下题目的要求,其中说要求拷贝`hamlet_1`mapping定义,并且要求顶一个的多字段类型speaker,其中一个字段名字叫tokenle,类型为文本类型。

多字段其实主要考察mapping的自定义,我们可以理解为一个字段有多种类型,是通过fields关键字段实现。

三、解题

Step 1、创建 `hamlet_1` mapping

bash 复制代码
PUT /hamlet_1
{
  "mappings": {
    "properties": {
      "line_number": {
        "type": "text"
      },
      "speaker": {
        "type": "text"
      },
      "text_entry": {
        "type": "text"
      }
    }
  }

Step 2、拷贝索引hamlet_1结构创建hamlet_2索引

索引中settings 配置

  • number_of_shards:索引分片数量
  • number_of_replicas:索引中备份数量

多字段要使用fileds 关键字,定义字段和mapping中最外层字段定义一样

bash 复制代码
PUT /hamlet_2
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  },
  "mappings": {
    "properties": {
      "line_number": {
        "type": "text"
      },
      "speaker": {
        "type": "text",
        "fields": {
          "token": {
            "type": "text"
          }
        }
      },
      "text_entry": {
        "type": "text"
      }
    }
  }
}

Step 3、reindex 数据

bash 复制代码
POST _reindex
{
  "source": {
    "index": "hamlet_1"
  },
  "dest": {
    "index": "hamlet_2"
  }
}

Step 4、执行查询

bash 复制代码
GET hamlet_2/_search
{
  "query": {
    "match": {
      "speaker.tokens": "hamlet"
    }
  }
}

四、总结

mapping中多字段定义要是使用关键字 fileds,创建字段和最外层字段格式一样

参考资料

送一波福利:

福利一

有需要内推JD的同学,可以私信或留言,我帮您内推,流程快!!!

有需要内推JD的同学,可以私信或留言,我帮您内推,流程快!!!

有需要内推JD的同学,可以私信或留言,我帮您内推,流程快!!!

福利二

福利三

相关推荐
碱化钾21 分钟前
学习笔记——GPU训练
笔记·学习
派森先生1 小时前
sk08.【scikit-learn基础】--『监督学习』之K近邻算法
学习·scikit-learn·近邻算法
励志不掉头发的内向程序员1 小时前
【Linux系列】解码 Linux 内存地图:从虚拟到物理的寻宝之旅
linux·运维·服务器·开发语言·学习
谷歌开发者7 小时前
Web 开发指向标 | Chrome 开发者工具学习资源 (一)
前端·chrome·学习
zskj_qcxjqr8 小时前
七彩喜艾灸机器人:当千年中医智慧遇上现代科技
大数据·人工智能·科技·机器人
本郡主是喵9 小时前
用 TypeScript 进行 Truffle 测试
学习·区块链
武文斌7710 小时前
复习总结最终版:单片机
linux·单片机·嵌入式硬件·学习
sealaugh3211 小时前
AI(学习笔记第十二课) 使用langsmith的agents
人工智能·笔记·学习
QZ_orz_freedom11 小时前
学习笔记--事务管理
笔记·学习
洛克大航海12 小时前
Ubuntu安装Hbase
大数据·linux·数据库·ubuntu·hbase