邵阳建设网站的公司,租电信服务器开网站,晋城有做网站的吗,2023网页设计十大品牌文章目录 简介ES文档操作创建索引查看索引创建映射字段查看映射关系字段属性详解typeindexstore 字段映射设置流程 新增数据新增会随机生成id新增自定义id智能判断 修改数据删除数据查询基本查询查询所有#xff08;match_all#xff09;匹配查询多字段查询词条匹配多词条精确… 文章目录 简介ES文档操作创建索引查看索引创建映射字段查看映射关系字段属性详解typeindexstore 字段映射设置流程 新增数据新增会随机生成id新增自定义id智能判断 修改数据删除数据查询基本查询查询所有match_all匹配查询多字段查询词条匹配多词条精确匹配 结果过滤直接指定该字段指定includes和excludes高级查询布尔组合多条件查询范围查询模糊查询fuzzy 排序单字段排序sort多字段查询 聚合aggregations桶(bucket)类似于数据库中的分组group_by 简介
Kibana是一个基于Node.js的Elasticsearch索引库数据统计工具可以利用Elasticsearch的聚合功能生成各种图表如柱形图、线状图、饼图等。 在开始之前需要启动Kibana和Elasticsearch ES的访问地址http://ip:9200 Kibana的访问地址http://ip:5601 操作步骤进入到Kibana后点击左侧的Dev Tools
ES文档操作
ES是面向文档的存储文档的同时对其进行索引使其能够被搜索到。
创建索引
Elasticsearch采用Rest API风格因此其API就是一次HTTP请求可以使用任何工具发起http请求创建索引的请求格式。由于遵循REST风格可以很直观的想到操作名。
POST新增GET查询DELETE删除PUT修改 在这里使用Kibana简化操作 number_of_replicas设置索引库分片副本数量 number_of_shards: 设置索引库分片数量
查看索引
查看某一个特定索引库 GET 索引库名查看所有的索引库 GET *删除索引
DELETE 索引库名映射配置 索引有了接下来就是添加数据但是在添加数据之前必须定义映射。 映射就是定义文档的过程文档包含哪些字段这些字段是否保存是否索引是否分词等。只有配置清楚Elasticsearch才会帮我们进行索引库的创建。
创建映射字段
请求方式依然是PUT
PUT /索引库名/_mapping/类型名称
{properties: {字段名: {type: 类型,index: truestore: trueanalyzer: 分词器}}
}类型名称就是type的概念类似于数据库中不同表字段名任意填写可以指定很多属性。type类型可以是text、long、short、date、integer、object等index是否索引默认为truestore是否存储默认为false(会自动生成一个_source备份)analyzer分词器这里的ik_max_word即使用ik分词器
发起请求示例
PUT test/_mapping/goods
{properties:{title:{type:text,analyzer:ik_max_word},images:{type:keyword,index:false},price:{type:float}}
}字符串类型一共有两种text代表进行分词下面要加上分词器这里使用的ik分词器中ik_max_word代表按照最大程度划分。 keyword不进行分词。
【问题】
elasticsearch创建索引时遇到analyzer[ik_max_word] not found for field[title]
【原因】 IK分词器插件未安装
查看映射关系
GET /索引库名/_mapping字段属性详解
type
Elasticsearch中支持的数据类型非常丰富 下面我们介绍几个关键的 String类型又分两种
text可分词不可参与聚合keyword不可分词数据作为完整字段进行匹配可以参与聚合 Numberical数值类型分两类基本数据类型long、integer、short、byte、double、float、half_float浮点数的高精度类型scaled_float 需要指定一个精度因子比如说10或者100elasticseach会把真实值乘以这个因子存储取出时再还原。 Date日期类型 elasticsearch可以对日期格式化为字符串存储但是建议我们存储为毫秒值存储为long,节省空间。
index
index影响字段的索引情况
true字段会被索引则可以用来进行搜索默认值就是truefalse: 字段不会索引不能用来搜索 ** index的默认值就是true也就是说不进行任何配置所有字段都会被索引。** 但是有些字段是我们不希望被索引的比如商品的图片信息就需要手动设置index为false。
store
是否将数据进行额外存储。 在学习lucene和solr时我们知道如果一个字段的store的值设置为false,那么在文档列表中就不会有这个字段的值用户的搜索结果中不会显示出来。 但是在elasticsearch中即使store设置为false,也可以搜索到结果 原因是Elasticsearch在创建文档索引时会将文档中的原始数据备份保存在一个交_source的属性中而且我们可以通过过滤_source来选择哪些要显示哪些不显示。 而如果设置store为true,就会在_source以外额外存储一份数据比较多余因此一般我们都会将store设置为false事实上store的默认值就是false。
字段映射设置流程 新增数据
新增会随机生成id
POST /索引库/类型名
{“key”:value
}新增自定义id
如果我们想要自己新增的时候指定id可以这么做
POST /索引库/类型/id值
{
}智能判断
在学习Solr时我们发现我们在新增数据时只能使用提前配置好映射属性的字段否则就会报错。不过在Elasticsearch中并没有这样的规定。 事实上Elasticsearch非常智能你不需要给索引库设置任何mapping映射它也可以根据你输入的数据来判断类型动态添加数据映射。 相对上个例子来说我这里新增了color和address两个字段。再看下索引库的映射关系。 color和address都被成功映射了。
修改数据
把刚才新增的请求方式改为PUT就是修改数据操作不过修改操作必须要指定id。
id对应文档存在则修改id对应文档不存在则新增 注意如果只修改了一个字段那么原有的其他字段都会消失只保留当前的这次修改相当于覆盖
删除数据
DELETE test/goods/2查询
基本查询_source过滤结果过滤高级查询排序
基本查询
不能设置查询多个条件如果需要请用后面的高级bool查询
GET /索引库名/_search
{query{“查询类型”{“查询条件”“查询条件值”}}
}这里的query代表一个查询对象里面可以有不同的查询属性
查询类型match_allmatchtermrange等等查询条件查询条件会根据类型的不同写法也有差异后面根据示例进行详细讲解。
查询所有match_all hits:搜索结果的文档对象数组每个元素是一条搜索到的文档信息。
_index索引库_type文档类型_id:文档id_score:文档得分_source文档的源数据
匹配查询 多字段查询
multi_match与match类似不同的是它可以在多个字段中查询
GET /test/_search
{query:{multi_match: {query: 小米,fields: [ title, subTitle ]}}在本例中我们会在title和subtitle字段中查询小米这个词。
词条匹配
term查询被用于精确值匹配 这些精确值可能是数字、时间、布尔或者那些未分词的字符串(keyword)
GET /test/_search
{query:{term:{price:2699.00}}
}
多词条精确匹配
terms查询和term查询一样但它允许你指定多值进行匹配如果这个字段包含了指定值中的任何一个值那么这个文档满足条件。
GET /test/_search
{query:{terms:{price:[2699.00,2899.00,3899.00]}}
}结果过滤
默认情况下elasticsearch在搜索的结果中会把文档中保存在_source的所有字段都返回。如果我们只想获取其中的部分字段我们可以添加_source的过滤。
直接指定该字段
GET /heima/_search
{_source: [title,price],query: {term: {price: 2699}}
}指定includes和excludes
我们也可以通过下面的方法来实现过滤
includes来指定想要显示的字段excludes来指定不想显示的字段
GET /test/_search{_source: {includes:[title,price]},query: {term: {price: 2699}}}与下面的结果将是一样的GET /test/_search{_source: {excludes: [images]},query: {term: {price: 2699}}}高级查询
布尔组合多条件查询
GET test/goods/_search
{query: {bool: {must: [{match: {title: 小米电视}}],must_not: [{match: {title: 电视}}]}}
}查询bool里面结果全为true的情况。
范围查询
range查询找出那些落在指定区间内的数字或者时间range允许以下操作符。
操作符说明gt大于gte大于等于lt小于lte小于等于示例
GET test/goods/_search
{query: {range: {price: {gte: 3000,lte: 9909}}}
}模糊查询fuzzy
fuzzy查询是term查询的模糊等价它允许用户搜索词条与实际词条的拼写出现偏差但是偏差的距离不得超过2.
GET /test/_search{query: {fuzzy: {title: appla}}}根据上面的示例能够查询到apple的结果。我们也可以通过fuzziness来指定允许的编辑距离。
GET /test/_search{query: {fuzzy: {title: {value:appla,fuzziness:1}}}}排序
单字段排序sort
sort可以让我们按照不同的字段进行排序并且通过order指定排序的方式。 示例
GET /test/_search
{query: {match: {title: 小米手机}},sort: [{price: {order: desc}}]
}sort是对查询后做的不属于查询和过滤的条件因此在query查询对象外面。
多字段查询
假定我们想要结合使用price和_score得分进行查询并且匹配的结果首先按照价格排序然后按照相关性得分排序。
GET test/goods/_search
{query: {bool: {must: [{match: {title: 小米}}]}},sort: [{price: {order: desc}},{_score: {order: desc}}]
}聚合aggregations
聚合可以让我们及其方便的实现对数据的统计分析 Elasticsearch中的聚合包含多种类型最常用的两种一个叫桶一个叫度量。
桶(bucket)类似于数据库中的分组group_by
桶的作用是按照某种方式对数据进行分组每一组数据在ES中被称为一个桶。Elasticsearch中提供的划分桶的方式有很多
Date Histogram Aggregation:根据日期阶梯分组例如给定阶梯为周会自动每周分为一组。Histogram Aggregation根据数值阶梯分组与日期类似Terms Aggregation根据词条内容分组词条内容完全匹配的为一组Range Aggregation数值和日期的范围分组指定开始和结束然后按照阶段分组。…