elasticsearch学习(1)简单查询与聚合
elastic
被用作全文搜索、结构化搜索、分析以及这三个功能的组合
- 一个ElasticSearch集群可以包含多个索引,
- 每个索引包含多个类型
- 一个类型存储着多个文档
- 每个文档又有多个属性
索引(名词)
- 一个 索引 类似于传统关系数据库中的一个 数据库 , 是一个存储关系型文档的地方。 索引 (index) 的复数词为 indices 或
indexes 。
索引(动词)
- 索引一个文档 就是存储一个文档到一个 索引 (名词) 中以便它可以被检索和查询到。 这非常类似于 SQL语句中的 INSERT 关键词, 除
了文档已存在时新文档会替换旧文档情况之外
fliter
- 高效的执行结构化查询
query
- bool,match,must,about
- example
GET /megacorp/employee/_search
{
"query" : {
"match" : {
"about" : "rock climbing"
}
}
}
GET /megacorp/employee/_search
{
"query" : {
"bool": {
"must": {
"match" : {
"last_name" : "smith"
}
},
"filter": {
"range" : {
"age" : { "gt" : 30 }
}
}
}
}
}
- 全文搜索 about
相关性得分
Elasticsearch默认按照相关性得分排序, 即每个文档跟查询的匹配程度。
GET /megacorp/employee/_search
{
"query" : {
"match" : {
"about" : "rock climbing"
}
}
}
- terms 相当于MySQL中的group_by
GET /megacorp/employee/_search
{
"aggs": {
"all_interests": {
"terms": { "field": "interests" }
}
}
}
聚合搜索
- 桶 buckets 相当于MySQL的group
- 指标 Metrics 相当于聚合函数,count、max、min
GET /cars/transactions/_search
{
"size" : 0,
"aggs": {
"colors": {
"terms": {
"field": "color"
},
"aggs": {
"avg_price": {
"avg": {
"field": "price"
}
}
}
}
}
}
为度量新增 aggs 层。
为度量指定名字: avg_price 。
最后, 为 price 字段定义 avg 度量
- 按照日期中的月份聚合
GET /cars/transactions/_search
{
"size" : 0,
"aggs": {
"sales": {
"date_histogram": {
"field": "sold",
"interval": "month",
"format": "yyyy-MM-dd"
}
}
}
}
时间间隔要求是日历术语 (如每个 bucket 1 个月
- 处理返回数据时间间断
GET /cars/transactions/_search
{
"size" : 0,
"aggs": {
"sales": {
"date_histogram": {
"field": "sold",
"interval": "month",
"format": "yyyy-MM-dd",
"min_doc_count" : 0,
"extended_bounds" : {
"min" : "2014-01-01",
"max" : "2014-12-31"
}
}
}
}
}
这个参数强制返回空 buckets。
这个参数强制返回整年。
- cardinality 去重
GET /cars/transactions/_search
{
"size" : 0,
"aggs" : {
"distinct_colors" : {
"cardinality" : {
"field" : "color"
}
}
}
}
返回的结果表明已经售卖了三种不同颜色的汽车:
...
"aggregations": {
"distinct_colors": {
"value": 3
}
}
文档元数据
- _index 索引
一个 索引 应该是因共同的特性被分组到一起的文档集合。 例如, 你可能存储所有的产品在索引 products 中, 而存储所有销售的交易到
索引 sales 中。
虽然也允许存储不相关的数据到一个索引中, 但这通常看作是一个反模式的做法。
实际上, 在 Elasticsearch中, 我们的数据是被存储和索引在 分片 中, 而一个索引仅仅是逻辑上的命名空间, 这个命名空间由一个或者多
个分片组合在一起。
然而, 这是一个内部细节, 我们的应用程序根本不应该关心分片, 对于应用程序而言, 只需知道文档位于一个 索引
内。 Elasticsearch会处理所有的细节- _type 类型
数据可能在索引中只是松散的组合在一起, 但是通常明确定义一些数据中的子分区是很有用的。
例如, 所有的产品都放在一个索引中,
但是你有许多不同的产品类别, 比如 "electronics"、 "kitchen"和 "lawn-care"。
这些文档共享一种相同的(或非常相似) 的模式: 他们有一个标题、 描述、 产品代码和价格。 他们只是正好属于“产品”下的一些子类。
Elasticsearch公开了一个称为 types (类型) 的特性, 它允许您在索引中对数据进行逻辑分区。 不同 types 的文档可能有不同的字段, 但最好能够非常相似。- _id
ID 是一个字符串, 当它和 _index 以及 _type 组合就可以唯一确定 Elasticsearch中的一个文档。
当你创建一个新的文档, 要么提供自己
的 _id , 要么让 Elasticsearch帮你生成。
elasticsearch学习(1)简单查询与聚合的更多相关文章
- Elasticsearch使用系列-基本查询和聚合查询+sql插件
Elasticsearch使用系列-ES简介和环境搭建 Elasticsearch使用系列-ES增删查改基本操作+ik分词 Elasticsearch使用系列-基本查询和聚合查询+sql插件 Elas ...
- ElasticSearch中的简单查询
前言 最近修改项目,又看了下ElasticSearch中的搜索,所以简单整理一下其中的查询语句等.都是比较基础的.PS,好久没写博客了..大概就是因为懒吧.闲言少叙书归正传. 查询示例 http:// ...
- Java中使用elasticsearch搜索引擎实现简单查询、修改等操作-已在项目中实际应用
以下的操作环境为:jdk:1.8:elasticsearch:5.2.0 maven架包下载坐标为: <dependency> <groupId>org.elasticsear ...
- MongoDB学习day06--高级查询aggregate聚合管道和nodejs操作aggregate
一.MongoDB聚合管道(Aggregation Pilpeline) 使用聚合管道可以对集合中的文档进行变换和组合. 主要功能:表的关联查询.数据统计 二.aggregate 管道操作符与表达式 ...
- Elasticsearch学习(一)————简单命令
Elasticsearch一.简介**Elasticsearch 是一个分布式的搜索和分析引擎,可以用于全文检索.结构化检索和分析,并能将这三者结合起来.Elasticsearch 基于 Lucene ...
- Oracle学习之简单查询
使用scott用户下的表, 1.查询所有内容SELECT * FROM emp; 2.查询员工信息,包括员工编号,姓名,职位3个信息SELECT empno,ename,job FROM emp; 3 ...
- Elasticsearch学习笔记(三)聚合分析Agg
一.设置fielddata PUT /index/_mapping/type { "properties":{ "fieldName" ...
- Elasticsearch学习之多种查询方式
1. query string search 搜索全部商品:GET /ecommerce/product/_search took:耗费了几毫秒 timed_out:是否超时,这里是没有 _shard ...
- ElasticSearch 学习记录之ES几种常见的聚合操作
ES几种常见的聚合操作 普通聚合 POST /product/_search { "size": 0, "aggs": { "agg_city&quo ...
随机推荐
- 设计四个线程,当中共两个线程每次对j添加1,另外两个线程每次对j降低1。循环100次,写出程序。
package cn.usst.DataTest6; /** * 设计四个线程,当中共两个线程每次对j添加1,另外两个线程每次对j降低1.循环100次,写出程序. * @ * */ public cl ...
- JavaSE入门学习12: Java面相对象之static使用方法
我们能够基于一个类创建多个该类的对象,每一个对象都拥有自己的成员,互相独立. 然而在某些时候,我们更希 望该类全部的对象共享同一个成员. 此时就是static大显身手的时候了. Java中被stati ...
- Codeforces Round #272 (Div. 2)C. Dreamoon and Sums 数学推公式
C. Dreamoon and Sums Dreamoon loves summing up something for no reason. One day he obtains two int ...
- Java代码规范_插件_阿里java开发手册
给大家分享一个阿里巴巴的java开发规范,在日常自动化工作中我们可以参考一下,特别是用java进行coding的同学. 而且还可以利用相应的插件进行代码扫描检测,感兴趣的们可以马上应用到自动化中来. ...
- git ldap
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md ldap : enabled : true host : 'ope ...
- spring web中的filter
昨天看了会spring web中部分代码,主要是各种filter,回顾一下: Spring的web包中中有很多过滤器,这些过滤器位于org.springframework.web.filter并且理所 ...
- 【转载】sql索引存储结构
一.引言 对数据库索引的关注从未淡出我的们的讨论,那么数据库索引是什么样的?聚集索引与非聚集索引有什么不同?希望本文对各位同仁有一定的帮助.有不少存疑的地方,诚心希望各位不吝赐教指正,共同进步.[最近 ...
- mysql的启动和停止
1.检查数据库服务器是否开启:任务管理器-->后台进程-->查看mysqld是否存在.存在说明开启了,反之没开启 2.管理员运行cmd,输入重启指令:net start **(**数据库名 ...
- jmeter 3.x plugins 的使用
JMeter Plugins 一直以来,JMeter Plugins为我们提供了很多高价值的JMeter插件,比如: 用于服务器性能监视的PerfMon Metrics Collector 用于建立压 ...
- Codeforces 792C
题意:给出一个由0到9数字构成的字符串,要求删去最少的数位,使得这个字符串代表的数能被3整除,同时要求不能有前导零,并且至少有一位(比如数字11,删去两个1后就没有数位了,所以不符合).如果能够处理出 ...