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)简单查询与聚合的更多相关文章

  1. Elasticsearch使用系列-基本查询和聚合查询+sql插件

    Elasticsearch使用系列-ES简介和环境搭建 Elasticsearch使用系列-ES增删查改基本操作+ik分词 Elasticsearch使用系列-基本查询和聚合查询+sql插件 Elas ...

  2. ElasticSearch中的简单查询

    前言 最近修改项目,又看了下ElasticSearch中的搜索,所以简单整理一下其中的查询语句等.都是比较基础的.PS,好久没写博客了..大概就是因为懒吧.闲言少叙书归正传. 查询示例 http:// ...

  3. Java中使用elasticsearch搜索引擎实现简单查询、修改等操作-已在项目中实际应用

    以下的操作环境为:jdk:1.8:elasticsearch:5.2.0 maven架包下载坐标为: <dependency> <groupId>org.elasticsear ...

  4. MongoDB学习day06--高级查询aggregate聚合管道和nodejs操作aggregate

    一.MongoDB聚合管道(Aggregation Pilpeline) 使用聚合管道可以对集合中的文档进行变换和组合. 主要功能:表的关联查询.数据统计 二.aggregate 管道操作符与表达式 ...

  5. Elasticsearch学习(一)————简单命令

    Elasticsearch一.简介**Elasticsearch 是一个分布式的搜索和分析引擎,可以用于全文检索.结构化检索和分析,并能将这三者结合起来.Elasticsearch 基于 Lucene ...

  6. Oracle学习之简单查询

    使用scott用户下的表, 1.查询所有内容SELECT * FROM emp; 2.查询员工信息,包括员工编号,姓名,职位3个信息SELECT empno,ename,job FROM emp; 3 ...

  7. Elasticsearch学习笔记(三)聚合分析Agg

    一.设置fielddata PUT /index/_mapping/type {     "properties":{          "fieldName" ...

  8. Elasticsearch学习之多种查询方式

    1. query string search 搜索全部商品:GET /ecommerce/product/_search took:耗费了几毫秒 timed_out:是否超时,这里是没有 _shard ...

  9. ElasticSearch 学习记录之ES几种常见的聚合操作

    ES几种常见的聚合操作 普通聚合 POST /product/_search { "size": 0, "aggs": { "agg_city&quo ...

随机推荐

  1. iOS屏幕适配方案-Auto Layout

    市场上的android手机五花八门.各种尺寸的屏幕让android程序员们比較头疼. 也有一些大神写了一些博客提出了自己的观点.iOS貌似也迎来了大屏6+,因此屏幕适配的问题也是有滴,因此苹果也有自己 ...

  2. STM32跑马灯

    #include "stm32f10x.h" #include "led.h" #include "delay.h" #include &q ...

  3. AutoLayout初战----Masonry与FDTemplateLayoutCell实践

    学iOS也有几个月了.一直都是纯代码开发,菜鸟入门,到今天还处在Frame时代.刚好近期项目在提审.有点时间能够学学传说中的AutoLayout.事实上.就是android的相对布局(Relative ...

  4. C++链表冒泡,归并,插入排序(纯指针)

    #include <iostream> using namespace std; //别问我为什么要写链表的冒泡排序. struct Node { int data; Node *next ...

  5. java 多线程——并发编程模型 学习笔记

                                                                                                 并发编程模型 ...

  6. Ajax之XMLHttpRequst对象

    XMLHttpRequest对象提供客户端与Http服务器异步通信的协议.通过该协议,Ajax可以使页面像桌面应用程序一样,只同服务器进行数据层的交换,而不用每次都刷新页面,也不用每次将数据处理工作提 ...

  7. Python猜年龄

    题目:Python实现猜年龄 步骤一:实现最简单的猜年龄 # 事先定义 dark_knight_age = 28 user_age = input('Please guess my age:') us ...

  8. codevs1036商务旅行(LCA)

    1036 商务旅行  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description 某首都城市的商人要经常到各城镇去做 ...

  9. [Swift通天遁地]七、数据与安全-(7)创建文件浏览器:以可视化的方式浏览沙箱文件

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  10. Akka源码分析-故障恢复

    Actor故障恢复是akka中非常重要的内容,在之前的博客中虽然有介绍,但都是杂糅在其他知识点的细节中,本博客将单独介绍这一部分的故障恢复.为了简化分析的单独,本文只研究用户的actor故障恢复的步骤 ...