999 - Elasticsearch Query DSL 01

Query DSL 简介

  • Elasticsearch提供了基于JSON的、完整的Query DSL(Domain Specific Language,领域特定语言)。
  • 把Query DSL想象成AST(Abstract Syntax Tree,抽象语法树),这样就有叶子子句复合(容器)子句
    • 叶子子句:叶子子句可以单独使用,一般用来查找指定字段的指定值,例如matchtermrange
    • 复合子句:组合叶子子句或其他复合子句,一般用来逻辑组合多查询(例如bool)或改变行为(例如constant_score)。

Query Context | Filter Context

  • Query Context
    • 除了匹配文档,还会计算匹配程度(相关性算分),分数越高匹配程度越高。
  • Filter Context
    • Filter Context只进行过滤(是|否),不计算匹配程度(相关性算分)。
    • ELasticsearch会自动缓存常用的过滤,以提高性能。
  • 总之,把需要计算匹配程度的条件放到Query Context下,其余尽量放到Filter Context下。放到Query Context下算分,放到Filter Context缓存,提高性能。

在Query DSL这一部分的示例中,我都会使用这份样例数据

DELETE /examples
PUT /examples
{
  "settings": {
    "number_of_replicas": 1,
    "number_of_shards": 5
  }
}

POST /examples/_doc/_bulk?pretty
{"index":{"_id":1}}
{"name":"Mr. Zhang","age":22,"birth":"1997-03-26","address":"China Jiangsu Xuzhou","handsome":true}
{"index":{"_id":2}}
{"name":"A B","age":22,"birth":"1997-03-26","address":"China Jiangsu","handsome":true}
{"index":{"_id":3}}
{"name":"C D","age":23,"birth":"1996-03-26","address":"China Zhejiang","handsome":true}
{"index":{"_id":4}}
{"name":"E F","age":24,"birth":"1995-03-26","address":"China Chongqing","handsome":true}
{"index":{"_id":5}}
{"name":"G","age":25,"birth":"1994-03-26","address":"Jiangsu","handsome":false}

GET /examples/_search
GET /examples/_mapping
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 原理   全文搜索是ES的核心功能。ES中的数据按数据特性可分为两类:确切值及全文文本。ES中如keywor...
    简单是美美阅读 5,895评论 0 53
  • 声明:本文转自我的个人博客,有兴趣的可以查看原文。转发请注明来源。 这是一篇科普文。 1. 背景 Elastics...
    此星爷非彼星爷阅读 5,441评论 0 14
  • 引言 虽然之前做过 elasticsearch 的项目,但是没有对整个项目的知识点进行过系统的整理。这次趁着对 e...
    零点145阅读 13,120评论 0 2
  • 萧红的散文最打动我的地方是,她遣词造句十分飘逸灵动,经常出现我完全想不到的表达。 本系列赏析的就是其散文细节的微妙...
    燕子肥来了阅读 4,106评论 0 0
  • 2月9日 星期六 雪 昨天晚上,天空中下起了鹅毛大雪。到了今天早上,雪停了,地上、树上积满了厚厚的一层的白雪,就...
    睿智少年阅读 2,256评论 0 1