Reference

  1. 6.4最新版英文:https://www.elastic.co/guide/...
  2. 中文:https://www.elastic.co/guide/...
  3. 5.4中文:http://cwiki.apachecn.org/pag...

Defination

DSL(Domain Specific Language):Elasticsearch 定义的查询语言

ES字段类型:https://blog.csdn.net/chengyu...

API

  • Stats API:获取索引统计信息(http://cwiki.apachecn.org/pag...)

    GET es-index_*/_stats
    {"_shards": {"total": 622,"successful": 622,"failed": 0},//返回的统计信息是索引级的聚合结果,具有primaries和total的聚合结果。其中primaries只是主分片的值,total是主分片和副本分片的累积值。"_all": {"primaries": {"docs": {  //文档和已删除文档(尚未合并的文档)的数量。注意,此值受刷新索引的影响。"count": 2932357017,"deleted": 86610},"store": { //索引的大小。"size_in_bytes": 2573317479532,}, "indexing": {}, //索引统计信息,可以用逗号分隔的type列表组合,以提供文档级统计信息。"get": {}, // get api调用统计"search": {}, // search api 调用统计},"total": {}}
    }
  • Search API(两种形式)

    1. using a simple query string as a parameter

      GET es-index_*/_search?q=eventid:OMGH5PageView
    2. using a request body

      GET es-index_*/_search
      {"query": {"term": {"eventid": {"value": "OMGH5PageView"}}}
      }

Query DSL

Leaf Query Clause: 叶查询子句
Compound Query Clause: 复合查询子句

DSL查询上下文

  • query context
    在查询上下文中,回答的问题是:How well does this document match this query clause?
    除了判断一条数据记录(document)是否匹配查询条件以外,还要计算其相对于其他记录的匹配程度,通过_score进行记录。
  • filter context**
    在查询上下文中,回答的问题是:Does this document match this query clause?
    仅判断document是否匹配,不计算_score
    一般用来过滤结构化数据,
    e.g. timestamp是否在2017-2018范围内,status是否是published
    频繁使用的过滤器会被Elasticsearch自动缓存,可提高性能

** 查询时,可先使用filter过滤操作过滤数据,然后使用query查询匹配数据

查询结果字段过滤

fields:字段过滤
script_fields:可对原始数据进行计算

"fields": ["eh"],  //仅返回eh字段
"script_fields": {"test": {"script": "doc['eh'].value*2"}
} // 返回eh字段值*2的数据并命名为test字段

查询过滤:query

bool 组合过滤器

{"bool" : {"must" :     {}, // 所有的语句都必须匹配,相当于SQL中的and"must_not" : {}, // 所有的语句都不能匹配,相当于SQL中的not"should" :   {}, // 至少有一个语句要匹配,相当于SQL中的OR"filter" :   {}, // }
}

filtered过滤器

{"filtered": {"query": {},"filter": {} // 在filter中进行数据过滤,然后再去query中进行匹配}
}

match和term

match(模糊匹配):先检查字段类型是否是analyzed,如果是,则先分词,再去去匹配token;如果不是,则直接去匹配token。
term(精确匹配):直接去匹配token。

terms: 多项查询

{ terms : { user: ['tony', 'kitty' ] } }

range范围过滤

对于date类型字段的范围选择可以使用 Date Math

{"range" : {"born" : {"gte": "01/01/2012","lte": "2013","format": "dd/MM/yyyy||yyyy" }}}{"range" : {"timestamp" : {"gte": "now-6d/d", // Date Math"lte": "now/d", // Date Math"time_zone": "+08:00"  // 时区}}}

exists 该条记录是否存在某个字段

{"exists" : { "field" : "user" }
}

wildcard: 通配符查询(对分词进行匹配查询)

Note that this query can be slow, as it needs to iterate over many terms. In order to prevent extremely slow wildcard queries, a wildcard term should not start with one of the wildcards * or ?
wildcard查询性能较差,尽量避免使用*或?开头来进行wildcard匹配

prefix: 前缀查询
regexp: 正则表达式查询

Tips

value带-的特殊处理

value带了-,则默认会被切词,导致搜索结果不准确。解决办法之一就是在字段那里加个.raw

term: {status:'pre-active'} => term: {status.raw: 'pre-active'}

sort

GET es-index_*/_search
{"fields" : ["eventid", "logtime"],"query": {"term": {"eventid": {"value": "OMGH5PageView"}}},"sort": [{"logtime": {"order": "asc"}}]
}

聚合aggregation

date_histogram

(和 histogram 一样)默认只会返回文档数目非零的 buckets。 即使 buckets
中没有文档我们也想返回。可以通过设置两个额外参数来实现这种效果:

"min_doc_count" : 0,  // 这个参数强制返回空 buckets。
"extended_bounds" : {  // 强制返回整年"min" : "2014-01-01","max" : "2014-12-31"
}

查询返回结果参数

took: 查询返回的时间(单位:毫秒)
time_out: 查询是否超时
_shards: 描述查询分片的信息,包括:查询了多少分片,成功的分片数量,失败的分片数量等
hits:搜索的结果
total: 满足查询条件的文档数
max_score:
hits: 满足条件的文档
_score: 文档的匹配程度

Elastic Search 学习笔记相关推荐

  1. Elastic Search学习笔记

    一:单机模式 数据格式 Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档.为了方便大家理解,我们将Elasticsearch里存储文档 数据和关系型数据库 MySQL存储数据的 ...

  2. Elastic Search学习笔记5——基本操作

    2019独角兽企业重金招聘Python工程师标准>>> 创建索引 1.非结构化创建 在head页面上打开"索引",点击新建索引,输入 索引名称.分片数和副本数 2 ...

  3. Selective Search 学习笔记

    Selective Search 潜水CSDN好多年,第一次写东西,在北大这边做毕业设计,做的是关于对象部件检测的课题,也就是从粗到细的检测,前段时间开始学习RCNN相关的东西,读了paper,这几天 ...

  4. Elastic Job学习笔记

    目标: 第一章:概述 1.理解任务调度的概念 2.理解分布式任务调度的概念 3.能够说出Elastic-Job是什么 第二章:Elastic-Job快速入门 1.能够搭建Elastic-Job快速入门 ...

  5. Selective Search学习笔记

    Selective Search 方法主要有三个优势: 捕捉不同尺度 capture all scales 多样化 diversification 快速计算 fast to compute 总结为:选 ...

  6. Elastic Search 中文拼音搜索补全实战

    引言 搜索提示是搜索框一个比较基础的功能,他赋予了搜索框生命,提高了用户的搜索体验.本文通过仿写 boss 直聘首页职位公司搜索,来实现一个自己搜索提示功能. 需求分析 搜索提示的情况比较多,比如根据 ...

  7. ElasticSearch 学习笔记:Multi Search

    本文目录 1 简介 2 格式 3 header格式 4 body格式 5 返回格式 6 性能 7 相关文章 1 简介 批量查询接口(Multi Search API)允许在一次请求中执行多个查询操作, ...

  8. [初窥目标检测]——《目标检测学习笔记(2):浅析Selective Search论文——“Selective Search for object recognition”》

    [初窥目标检测]--<目标检测学习笔记(2):浅析Selective Search论文--Selective Search for object recognition> 本文介绍 前文我 ...

  9. elastic search搜索学习打分算法简单总结

    elastic search搜索学习打分算法简单总结 之前也在es官网走马观花的看了一些es搜索方面的内容,发现自己之前对es的打分规则理解的很浅,最近又从阿里的<elastic stack实战 ...

  10. Elasticsearch核心技术与实战学习笔记 43 | 分页与遍历:From, Size, Search After Scroll API

    一 序 本文属于极客时间Elasticsearch核心技术与实战学习笔记系列. 二 分页 2.1 From / Size 默认情况下,查询按照相关度算分排序,返回前 10 条记录 容易理解的分页方案 ...

最新文章

  1. [数据结构] 散列表(哈希表)
  2. Spring MVC 如何加载静态html
  3. java多线程中方法_java中多线程 - 多线程中的基本方法
  4. 家用电器用户行为分析与事件识别代码详解+修改后运行无误的代码
  5. Java中数据类型的取值范围
  6. 对C# 程序员来说现在是到目前为止最好的时代
  7. python向量化和c哪个快_在python中向量化6 for循环累积和
  8. error:java:无效的源发行版_IDEA java出现无效的源发行版14解决方案_java
  9. 如何用好消息推送(push)做APP运营
  10. java在原文件替换_Java:创建临时文件并替换为原始文件
  11. php class variable,PHP中的變量類擴展 - 是否可能?
  12. js $.inArray
  13. Java基础之时间的友好显示
  14. java计算机毕业设计英语课程学习网站源程序+mysql+系统+lw文档+远程调试
  15. 浮点型数据在内存中是如何存储的
  16. [HNOI 2017] bzoj4826 影魔 [单调栈+扫描线]
  17. 69个经典Java面试题和答案详解,手慢无
  18. 多个迹象表明,瑞幸咖啡已进入新的发展阶段
  19. 记一次docker进不去容器的经历
  20. COGS 1043. [Clover S2] Freda的迷宫

热门文章

  1. 2019,别进大厂了!
  2. mysql存储过程详细教程6_存储过程详解(示例代码)
  3. 显微镜自动聚焦原理是什么_自动玻璃感应门原理是什么?看看东莞装修网怎么说...
  4. linux怎么安装网卡驱动固件,Linux网卡驱动的安装方式
  5. linux popen阻塞_linux popen()与system()的区别
  6. C语言substr函数用法,自己实现substr函数——C语言
  7. 用户名_网络安全与防御-OpenSSH用户名枚举及其检测方法
  8. linux查看cpt硬盘命令,Linux基础知识复习之命令篇
  9. python 线程-threding示例使用
  10. php post 漏洞_漏洞研究|ThinkPHP request函数远程代码执行