当前位置: 首页 > news >正文

Elasticsearch:Mapping-映射

一、创建索引 自动生成索引字段数据类型即自动映射

创建之前,先删除索引防止重复创建
删除索引:

DELETE product_mapping

创建索引 product_mapping并且赋值

PUT /product_mapping/_doc/1
{"name": "xiaomi phone","desc": "shouji zhong de zhandouji","count": 123456,"price": 123.123,"date": "2020-05-20","isdel": false,"tags": ["xingjiabi","fashao","buka"]
}

执行结束:索引创建成功。

{"_index" : "product_mapping","_type" : "_doc","_id" : "1","_version" : 1,"result" : "created","_shards" : {"total" : 2,"successful" : 1,"failed" : 0},"_seq_no" : 0,"_primary_term" : 1
}

查询索引

GET product_mapping/_search

执行结果:

{"took" : 0,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 1,"relation" : "eq"},"max_score" : 1.0,"hits" : [{"_index" : "product_mapping","_type" : "_doc","_id" : "1","_score" : 1.0,"_source" : {"name" : "xiaomi phone","desc" : "shouji zhong de zhandouji","count" : 123456,"price" : 123.123,"date" : "2020-05-20","isdel" : false,"tags" : ["xingjiabi","fashao","buka"]}}]}
}

查询索引自动生成的映射

GET product_mapping/_mapping

结果如下:

{"product_mapping" : {"mappings" : {"properties" : {"count" : {"type" : "long"},"date" : {"type" : "date"},"desc" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}},"isdel" : {"type" : "boolean"},"name" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}},"price" : {"type" : "float"},"tags" : {"type" : "text","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}}}}}
}

总结:
根据put创建索引赋值的时候每个字段的数据,动态的生成了字段的属性,可以类比mysql的表结构的字段属性,这里重点介绍一下text类型,即文本类型,在创建索引的时候,如果是text类型的,那么会对这个字段进行索引,生成倒排索引进行存储,后续查询的时候,如果查询方式也支持对搜索的内容进行索引分词,那么就会把搜索条件分词后的词项和生成索引的时候索引的列的词项进行匹配。

"fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}

这个keyword,不会分词,如果text需要精准匹配,可以用该字段的keyword.
1.“name”: “xiaomi phone”,在创建索引的时候,这个会被分词为xiaomi 和 phone两个词项,下面的查询方式
搜索内容无论是xiaomi 或者 phone 还是两个顺序颠倒,都能匹配到,因为会对搜索条件进行分词为xiaomi 或者 phone,匹配索引分词后的词根会匹配到。

GET product_mapping/_search
{"query": {"match": {"name": "phone xiaomi "}}
}

name.keyword 就是查询索引中name分词前为xiaomi 的内容,因为name分词前只有xiaomi phone,所以这样查询不到

GET product_mapping/_search
{"query": {"match": {"name.keyword": " xiaomi "}}
}

下面这样的方式可以匹配的到

GET product_mapping/_search
{"query": {"match": {"name.keyword": "xiaomi phone"}}
}

二、创建索引 手动映射数据类型

手动创建索引和mapping映射

PUT /product
{"mappings": {"properties": {"date": {"type": "text"},"desc": {"type": "text","analyzer": "english"},"name": {"type": "text","index": "false"},"price": {"type": "long"},"tags": {"type": "text","index": "true"},"parts": {"type": "object"},"partlist": {"type": "nested"}}}
}

name的属性"index": "false"表示创建索引的时候不进行分词。

GET /product/_search
{"query": {"match": {"name": "xiaomi"}}
}

执行会报错

{"error" : {"root_cause" : [{"type" : "query_shard_exception","reason" : "failed to create query: Cannot search on field [name] since it is not indexed.","index_uuid" : "wEUFSz6VQmaC6Ko9oE3cxQ","index" : "product"}],"type" : "search_phase_execution_exception","reason" : "all shards failed","phase" : "query","grouped" : true,"failed_shards" : [{"shard" : 0,"index" : "product","node" : "QaQYrOAFRr2kwyt6IuJU9Q","reason" : {"type" : "query_shard_exception","reason" : "failed to create query: Cannot search on field [name] since it is not indexed.","index_uuid" : "wEUFSz6VQmaC6Ko9oE3cxQ","index" : "product","caused_by" : {"type" : "illegal_argument_exception","reason" : "Cannot search on field [name] since it is not indexed."}}}]},"status" : 400
}
http://www.lryc.cn/news/504037.html

相关文章:

  • 安装Tensorflow@FreeBSD(失败)
  • API接口示例:电商商品评论数据
  • 使用idea创建一个JAVA WEB项目
  • 解决MyBatis在 Oracle 中使用 IN 语句不能超过 1000 问题
  • 最长递增子序列两种算法实现(动态规划,二分查找)
  • Deepmotion技术浅析(三):特征提取
  • 国内CentOS使用yum安装docker和docker-compose
  • python学opencv|读取图像(十三)BGR图像和HSV图像互相转换深入
  • 【鸿蒙实战开发】数据的下拉刷新与上拉加载
  • 面向对象设计规则和各类设计模式
  • 《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(六)
  • 利用Docker分层构建优化镜像大小
  • Spring 魔法探秘:从 Bean 线程安全到事务魔法全解析
  • [Maven]IDEA父工程创建子工程后父工程不可运行
  • 【系统移植】在开发板上加载内核和根文件系统的三种方法
  • #渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍02-基于错误消息的SQL注入(Error-Based SQL Injection)
  • 数据结构-排序(来自于王道)
  • 【蓝桥杯选拔赛真题93】Scratch青蛙过河 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析
  • ReactPress最佳实践—搭建导航网站实战
  • Hive-4.0.1数据库搭建(可选配置用户名密码远程连接)
  • P8772 求和 P8716 回文日期
  • MySQL迁移SQLite
  • RocketMQ中的顺序消息和乱序消息详解
  • Unity UGUI图片循环列表插件
  • Kafka系列教程 - Kafka 生产者 -2
  • AI Chat API 对接说明
  • Thread线程基础使用
  • 【Linux】结构化命令
  • ElasticSearch01-概述
  • docker xxxx is using its referenced image ea06665f255d