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 ...
随机推荐
- Apache 配置学习占位
http://www.cnblogs.com/yeer/archive/2011/01/18/1938024.html http://www.cnblogs.com/zgx/archive/2011/ ...
- 《iOS Human Interface Guidelines》——Wallet
Wallet Wallet(钱包)帮助人们查看和管理Pass(凭证),这是一种相似于登机牌.优惠券.会员卡.奖励卡和各种票的物理凭证的数字替代.Wallet也同意人们加入信用卡.借记卡和储值卡来和Ap ...
- ECMAScript 对象类型
ECMAScript:本地对象.内置对象.宿主对象 一.本地对象: 定义:ECMA-262(ECMAScript语言规范) 定义其为“独立于宿主环境的 ECMAScript 实现提供的对象”.它是由 ...
- 跨平台C、C++代码注意的事项
在我们的开发中,跨平台的需求越来越强烈,怎样保持C/C++代码能在多个平台上编译,是一个比較值得研究的问题.关于跨平台的文章网上非常多,跨平台的库网上也非常多.那么我从自己的跨平台开发经验谈一谈自己的 ...
- Scroller的应用--滑屏实现
1.Scroller源代码分析 以下是对Scroller源代码的分析,并附有源代码.例如以下: package android.widget; import android.content.Conte ...
- 转 linux/unix学习经典书籍
都是一些链接. 1. Linux网络编程经典书籍推荐 http://blog.csdn.net/zhangpeng_linux/article/details/7001970 2. C语言经典著作导读 ...
- 【HDU 4864】 Task
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4864 [算法] 贪心 不妨将两个数组分别按x从大到小排序 然后枚举每件物品,选择x值大于该物品的且 ...
- java调用restful接口的方法
Restful接口的调用,前端一般使用ajax调用,后端可以使用的方法如下: 1.HttpURLConnection实现 2.HttpClient实现 3.Spring的RestTemplate
- 洛谷P2744 [USACO5.3]量取牛奶Milk Measuring
题目描述 农夫约翰要量取 Q(1 <= Q <= 20,000)夸脱(夸脱,quarts,容积单位--译者注) 他的最好的牛奶,并把它装入一个大瓶子中卖出.消费者要多少,他就给多少,从不有 ...
- openstack instance resize to
Icehouse resize No valid host was found Hi all!! We're currently experimenting an error that's it's ...