注册网站对接的短信平台,活动策划模板,长春门户网站建设制作,龙腾盛世网站建设1. 文档#xff08;Document#xff09; 在ES中一个文档是一个可被索引的基础信息单元#xff0c;也就是一条数据 比如#xff1a;你可以拥有某一个客户的文档#xff0c;某一个产品的一个文档#xff0c;当然#xff0c;也可以拥有某个订单的一个文档。文档以JSON…1. 文档Document 在ES中一个文档是一个可被索引的基础信息单元也就是一条数据 比如你可以拥有某一个客户的文档某一个产品的一个文档当然也可以拥有某个订单的一个文档。文档以JSONJavascript Object Notation格式来表示而JSON是一个到处存在的互联网数据交互格式。 在一个index/type里面你可以存储任意多的文档。 1.1 创建文档 POST users/_doc
{user : Mike,post_date : 2019-04-15T14:12:12,message : trying out Kibana
} PUT users/_doc/1?op_typecreate
{user : Jack,post_date : 2019-05-15T14:12:12,message : trying out Elasticsearch
}1.2 查看文档 GET users/_doc/1 1.3 更新文档 POST users/_doc/1
{user: Lucy
} GET users/_doc/1在原文档上增加字段 POST users/_update/1/
{doc:{post_date : 2019-05-15T14:12:12,message : trying out Elasticsearch}
}再次查看结果 1.4 删除文档 DELETE users/_doc/1条件删除 POST users/_delete_by_query
{query:{match: {user: Mike}}
}2. 字段Field 相当于是数据表的字段对文档数据根据不同属性进行的分类标识。 3. 映射Mapping mapping是处理数据的方式和规则方面做一些限制如某个字段的数据类型、默认值、分析器、是否被索引等等。这些都是映射里面可以设置的其它就是处理ES里面数据的一些使用规则设置也叫做映射按着最优规则处理数据对性能提高很大因此才需要建立映射并且需要思考如何建立映射才能对性能更好。 3.1 创建映射 PUT /studentPUT /student/_mapping
{properties: {name:{type: text,index: true},sex:{type: text,index: true},age:{type: long,index: true}}
}映射数据说明 l字段名任意填写下面指定许多属性例如title、subtitle、images、price ltype类型Elasticsearch中支持的数据类型非常丰富说几个关键的 nString类型又分两种 text可分词 keyword不可分词数据会作为完整字段进行匹配 nNumerical数值类型分两类 基本数据类型long、integer、short、byte、double、float、half_float 浮点数的高精度类型scaled_float nDate日期类型 nArray数组类型 nObject对象 lindex是否索引默认为true也就是说你不进行任何配置所有字段都会被索引。 true字段会被索引则可以用来进行搜索 false字段不会被索引不能用来搜索 lstore是否将数据进行独立存储默认为false 原始的文本会存储在_source里面默认情况下其他提取出来的字段都不是独立存储的是从_source里面提取出来的。当然你也可以独立的存储某个字段只要设置store: true即可获取独立存储的字段要比从_source中解析快得多但是也会占用更多的空间所以要根据实际业务需求来设置。 lanalyzer分词器这里的ik_max_word即使用ik分词器。 3.2 查看映射 GET /student/_mapping3.3 索引映射关联 PUT /student1
{settings: {},mappings: {properties: {name:{type: text,index: true},sex:{type: text,index: false},age:{type: long,index: false}}}
}4. ES高级查询 Elasticsearch提供了基于JSON提供完整的查询DSL来定义查询 定义数据 : POST /student/_doc/1001
{
name:zhangsan,
nickname:zhangsan,sex:男,age:30
}
POST /student/_doc/1002
{
name:lisi,
nickname:lisi,sex:男,age:20
}
POST /student/_doc/1003
{
name:wangwu,nickname:wangwu,sex:女,age:40
}
POST /student/_doc/1004
{
name:zhangsan1,
nickname:zhangsan1,sex:女,age:50
}
POST /student/_doc/1005
{
name:zhangsan2,
nickname:zhangsan2,sex:女,age:30
}4.1 查询所有文档:match_all term查询精确的关键词匹配查询不对查询条件进行分词。 GET /student/_search
{query:{match_all: {}}
}4.2 匹配查询:match GET /student/_search
{query: {match: {name: zhangsan}}
}4.3 字段匹配查询:multi_match GET /student/_search
{query: {multi_match: {query: zhangsan,fields: [name, nickname]}}
}4.4 关键字精确查询:term GET /student/_search
{query: {term: {name: {value: wangwu}}}
}4.5 多关键字精确查询:terms terms 查询和 term 查询一样但它允许你指定多值进行匹配。 如果这个字段包含了指定值中的任何一个值那么这个文档满足条件类似于mysql的in GET /student/_search
{query: {terms: {name: [zhangsan,lisi]}}
}4.6 指定返回字段_source 默认情况下Elasticsearch在搜索的结果中会把文档中保存在_source的所有字段都返回。 如果我们只想获取其中的部分字段我们可以添加_source的过滤 GET /student/_search
{_source: name, query: {terms: {name: [zhangsan]}}
}4.7 过滤字段includes 我们也可以通过 includes来指定想要显示的字段 excludes来指定不想要显示的字段 GET /student/_search
{_source: {includes: [name,nickname]}, query: {terms: {nickname: [zhangsan]}}
}GET /student/_search
{_source: {excludes: [name,nickname]}, query: {terms: {nickname: [zhangsan]}}
}4.8 组合查询:bool bool把各种其它查询通过must必须 、must_not必须不、should应该的方式进行组合 GET /student/_search
{query: {bool: {must: [{match: {name: zhangsan}}],must_not: [{match: {age: 40}}],should: [{match: {sex: 男}}]}}
}4.9 范围查询 range 查询找出那些落在指定区间内的数字或者时间。range查询允许以下字符 操作符 说明 gt 大于 gte 大于等于 lt 小于 lte 小于等于 GET /student/_search
{query: {range: {age: {gte: 30,lte: 35}}}
}4.10 模糊查询 返回包含与搜索字词相似的字词的文档。 编辑距离是将一个术语转换为另一个术语所需的一个字符更改的次数。这些更改可以包括 更改字符box → fox
删除字符black → lack
插入字符sic → sick
转置两个相邻字符act → cat为了找到相似的术语fuzzy查询会在指定的编辑距离内创建一组搜索词的所有可能的变体或扩展。然后查询返回每个扩展的完全匹配。 通过fuzziness修改编辑距离。一般使用默认值AUTO根据术语的长度生成编辑距离。 GET /student/_search
{query: {fuzzy: {name: {value: zhangsan}}}
}4.11 单字段排序 sort 可以让我们按照不同的字段进行排序并且通过order指定排序的方式。desc降序asc升序。 GET /student/_search
{query: {fuzzy: {name: zhangsan}},sort: [{age: {order : desc}}]
}4.12 多字段排序 假定我们想要结合使用 age和 _score进行查询并且匹配的结果首先按照年龄排序然后按照相关性得分排序 GET /student/_search
{query: {fuzzy: {name: zhangsan}},sort: [{age: {order : desc}},{_score: {order: desc}}]
}4.13 高亮查询 在进行关键字搜索时搜索出的内容中的关键字会显示不同的颜色称之为高亮。 在Bing搜索大数据 Elasticsearch可以对查询内容中的关键字部分进行标签和样式(高亮)的设置。 在使用match查询的同时加上一个highlight属性 lpre_tags前置标签 lpost_tags后置标签 lfields需要高亮的字段 title这里声明title字段需要高亮后面可以为这个字段设置特有配置也可以空 GET /student/_search
{query: {match: {name: zhangsan}},highlight: {pre_tags: font colorred,post_tags: /font,fields: {name: {}}}
}4.14 分页查询 from当前页的起始索引默认从0开始。 from (pageNum - 1) * size size每页显示多少条 GET /student/_search
{query: {match_all: {}},sort: [{age: {order: desc}}],from: 0,size: 2
}4.15 聚合查询 聚合允许使用者对es文档进行统计分析类似与关系型数据库中的group by当然还有很多其他的聚合例如取最大值、平均值等等。 对某个字段取最大值max GET /student/_search
{aggs:{max_age:{max:{field:age}}},size:0
}4.16 桶聚合查询 桶聚和相当于sql中的group by语句 terms聚合分组统计 GET /student/_search
{aggs:{age_groupby:{terms:{field:age}}},size:0
}