甘肃省住房和城乡建设厅网站首页,做橡胶的网站,购物商城平台开发,厦门专业网站设计公第十一章 分布式搜索引擎 elasticsearch
二、索引库操作 索引库就类似数据库表#xff0c;mapping 映射就类似表的结构。 我们要向 es 中存储数据#xff0c;必须先创建“库”和“表”。
1. mapping 映射属性 mapping 是对索引库中文档的约束#xff0c;常见的 mapping …第十一章 分布式搜索引擎 elasticsearch
二、索引库操作 索引库就类似数据库表mapping 映射就类似表的结构。 我们要向 es 中存储数据必须先创建“库”和“表”。
1. mapping 映射属性 mapping 是对索引库中文档的约束常见的 mapping 属性包括 type字段数据类型常见的简单类型有 字符串text可分词的文本、keyword精确值例如品牌、国家、ip 地址数值long、integer、short、byte、double、float布尔boolean日期date对象object index是否创建索引默认为 trueanalyzer使用哪种分词器properties该字段的子字段 例如下面的 json 文档
{age: 21,weight: 52.1,isMarried: false,info: 小帽课堂学习Java,email: alexgmail.com,score: [99.1, 99.5, 98.9],name: {firstName: 云,lastName: 赵}
}对应的每个字段映射mapping age类型为 integer参与搜索因此需要 index 为 true无需分词器weight类型为 float参与搜索因此需要 index 为 true无需分词器isMarried类型为 boolean参与搜索因此需要 index 为 true无需分词器info类型为字符串需要分词因此是 text参与搜索因此需要 index 为 true分词器可以用 ik_smartemail类型为字符串但是不需要分词因此是 keyword不参与搜索因此需要 index 为 false无需分词器score虽然是数组但是我们只看元素的类型类型为 float参与搜索因此需要 index 为 true无需分词器name类型为 object需要定义多个子属性 name.firstName类型为字符串但是不需要分词因此是 keyword参与搜索因此需要 index 为 true无需分词器name.lastName类型为字符串但是不需要分词因此是 keyword参与搜索因此需要 index 为 true无需分词器
2. 索引库的 CRUD
这里统一使用 Kibana 编写 DSL 的方式来演示。
2.1 创建索引库和映射
2.1.1 基本语法
请求方式PUT请求路径/索引库名可以自定义请求参数mapping 映射
2.1.2 格式
PUT /索引库名称
{mappings: {properties: {字段名:{type: text,analyzer: ik_smart},字段名2:{type: keyword,index: false},字段名3:{properties: {子字段: {type: keyword}}},// ...略}}
}2.1.3 示例
PUT /alex
{mappings: {properties: {info:{type: text,analyzer: ik_smart},email:{type: keyword,index: false},name:{properties: {firstName: {type: keyword}}},// ... 略}}
}2.2 查询索引库
2.2.1 基本语法 请求方式GET 请求路径/索引库名 请求参数无
2.2.2 格式
GET /索引库名2.2.3 示例 2.3 修改索引库 倒排索引结构虽然不复杂但是一旦数据结构改变比如改变了分词器就需要重新创建倒排索引这简直是灾难。因此索引库一旦创建无法修改 mapping。 虽然无法修改 mapping 中已有的字段但是却允许添加新的字段到 mapping 中因为不会对倒排索引产生影响。
2.3.1 语法说明
PUT /索引库名/_mapping
{properties: {新字段名:{type: integer}}
}2.3.2 示例 2.4 删除索引库
2.4.1 语法 请求方式DELETE 请求路径/索引库名 请求参数无
2.4.2 格式
DELETE /索引库名在 kibana 中测试 2.5 总结 索引库操作有哪些 创建索引库PUT /索引库名查询索引库GET /索引库名删除索引库DELETE /索引库名添加字段PUT /索引库名/_mapping
三、文档操作
1. 新增文档
1.1 语法
POST /索引库名/_doc/文档id
{字段1: 值1,字段2: 值2,字段3: {子属性1: 值3,子属性2: 值4},// ...
}1.2 示例
POST /alex/_doc/1
{info: 小帽课堂学习Java,email: alexgmail.com,name: {firstName: 云,lastName: 赵}
}1.3 响应 2. 查询文档
根据 rest 风格新增是 post查询应该是 get不过查询一般都需要条件这里我们把文档 id 带上。
2.1 语法
GET /{索引库名称}/_doc/{id}2.2 通过 kibana 查看数据
GET /alex/_doc/12.3 查看结果 3. 删除文档
删除使用 DELETE 请求同样需要根据 id 进行删除
3.1 语法
DELETE /{索引库名}/_doc/id值3.2 示例
# 根据id删除数据
DELETE /alex/_doc/14. 修改文档 修改有两种方式 全量修改直接覆盖原来的文档增量修改修改文档中的部分字段
4.1 全量修改 全量修改是覆盖原来的文档其本质是 根据指定的 id 删除文档新增一个相同 id 的文档 注意如果根据 id 删除时id 不存在第二步的新增也会执行也就从修改变成了新增操作了。
4.1.1 语法
PUT /{索引库名}/_doc/文档id
{字段1: 值1,字段2: 值2,// ... 略
}
4.1.2 示例
PUT /alex/_doc/1
{info: 小帽课堂学习高级Java,email: alexgmail.com,name: {firstName: 云,lastName: 赵}
}4.2 增量修改
增量修改是只修改指定 id 匹配的文档中的部分字段。
4.2.1 语法
POST /{索引库名}/_update/文档id
{doc: {字段名: 新的值,}
}4.2.2 示例
POST /alex/_update/1
{doc: {email: ZhaoYungmail.com}
}5. 总结 文档操作有哪些 创建文档POST /{索引库名}/_doc/文档 id { json 文档 }查询文档GET /{索引库名}/_doc/文档 id删除文档DELETE /{索引库名}/_doc/文档 id修改文档 全量修改PUT /{索引库名}/_doc/文档 id { json 文档 }增量修改POST /{索引库名}/_update/文档 id { “doc”: {字段}}