Elasticsearch支持很多查询方式,其中一种就是DSL,它是把请求写在JSON里面,然后进行相关的查询。

举个DSL例子

GET _search
{"query": { "bool": { "must": [{ "match": { "title":   "Search"        }}, { "match": { "content": "Elasticsearch" }}  ],"filter": [ { "term":  { "status": "published" }}, { "range": { "publish_date": { "gte": "2015-01-01" }}} ]}}
}

查询的种类

Elasticsearch中的DSL主要由两部分组成:

Leaf query Cluase 暂且叫做叶查询子句吧

这种查询可以单独使用,针对某一特定的字段查询特定的值,比如match、term、range等

Compound query Cluase复合查询子句

这种查询配合其他的叶查询或者复合查询,用于在逻辑上,组成更为复杂的查询,比如bool

查询虽然包含这两种,但是查询在不同的执行环境下,操作还是不一样的。

Query与Filter

查询在Query查询上下文和Filter过滤器上下文中,执行的操作是不一样的:

查询上下文:

在查询上下文中,查询会回答这个问题——“这个文档匹不匹配这个查询,它的相关度高么?”

如何验证匹配很好理解,如何计算相关度呢?之前说过,ES中索引的数据都会存储一个_score分值,分值越高就代表越匹配。另外关于某个搜索的分值计算还是很复杂的,因此也需要一定的时间。

查询上下文 是在 使用query进行查询时的执行环境,比如使用search的时候。

过滤器上下文:

在过滤器上下文中,查询会回答这个问题——“这个文档匹不匹配?”

答案很简单,是或者不是。它不会去计算任何分值,也不会关心返回的排序问题,因此效率会高一点。

过滤上下文 是在使用filter参数时候的执行环境,比如在bool查询中使用Must_not或者filter

另外,经常使用过滤器,ES会自动的缓存过滤器的内容,这对于查询来说,会提高很多性能。

总结

1 查询上下文中,查询操作不仅仅会进行查询,还会计算分值,用于确定相关度;在过滤器上下文中,查询操作仅判断是否满足查询条件

2 过滤器上下文中,查询的结果可以被缓存。

转载于:https://www.cnblogs.com/xing901022/p/4975931.html

Elasticsearch DSL中Query与Filter的不同相关推荐

  1. Elasticsearch实战(十五)---查询query,filter过滤,结合aggs 进行局部/全局聚合统计

    Elasticsearch实战-查询query,filter过滤,结合aggs 进行局部/全局聚合统计 文章目录 Elasticsearch实战-查询query,filter过滤,结合aggs 进行局 ...

  2. ES中的Query与Filter的区别

    QElasticsearch支持很多查询方式,其中一种就是DSL,它是把请求写在JSON里面,然后进行相关的查询. Query DSL 与 Filter DSL DSL查询语言中存在两种:查询DSL( ...

  3. ElasticSearch高级 (Query DSL查询 bulk批量操作 导入数据 各种查询 实战技巧-优化比重 全量与增量数据同步)

    ElasticSearch高级 01-Query DSL(Domain Specific Language) 1 查询上下文 2 相关度评分:_score 3 元数据:_source 4 Query ...

  4. Elasticsearch高级查询Query DSL

    一.高级查询Query DSL简介 1.Query DSL(简介 Elasticsearch中提供了一种强大的检索数据方式,这种检索方式称之为Query DSL(Domain Specified La ...

  5. es的query及filter

    为什么80%的码农都做不了架构师?>>>    ##query与filter的合并 Queries and filters merged 将filter的api列为deprecate ...

  6. elasticsearch in查询_Python Elasticsearch DSL 查询、过滤、聚合操作实例

    技术博客: https://github.com/yongxinz/tech-blog 同时,也欢迎关注我的微信公众号 AlwaysBeta,更多精彩内容等你来. Elasticsearch 基本概念 ...

  7. SQL to ElasticSearch DSL

    众所周知ElasticSearch目前是一个应用最为广泛的分布式搜索与分析引擎,它的功能强大,能够已很高的性能访问大规模数据.它拥有强大的查询分析语法,能够完成模糊查询.精准查询及聚集计算等诸多功能的 ...

  8. Elasticsearch - DSL 查询语句

    文章目录 1.DSL查询文档 1.1.DSL查询分类 1.2.全文检索查询 1.2.1.使用场景 1.2.2.基本语法 1.2.3.总结 1.3.精准查询 1.3.1.term查询 1.3.2.ran ...

  9. Elasticsearch DSL 查询详解

    在 Elasticsearch 中,提供了功能十分丰富.多种表现形式的查询语言-- DSL 查询. DSL 查询使用 JSON 格式的请求体与 Elasticsearch 交互,可以实现各种各样的查询 ...

最新文章

  1. linux设置开机服务自动启动/关闭自动启动命令
  2. MOSS Single Sign On Setup Step-By-Step( 转)
  3. 保护linux系统调用,Linux软中断与系统调用
  4. golang 函数 传入返回 slice/map/struct 本质
  5. 2022年跨境电商新玩法:Tik Tok私域流量沉淀+电商平台流量承接
  6. minio安装(包括docker安装)
  7. java小细节_为什么我喜欢Java的细节
  8. R软件中 文本分析安装包 Rjava 和 Rwordseg 傻瓜式安装方法四部曲
  9. something about Socket
  10. python物理模拟_在Python游戏中模拟重力【Programming(Python)】
  11. 6个部件组成一个圆球_2016年新课标人教版小学六年级数学上册单元练习题集
  12. KNN算法虹膜图片识别(源码)
  13. arcpy 使用ListFields函数获取字段列表的名称、类型和长度
  14. BP神经网络简单应用实例,bp神经网络应用举例
  15. java网课|Map线程
  16. java从入门到精通----OOP 2
  17. s.length什么意思
  18. Java自学笔记Day22
  19. Zabbix探索:关于网络设备SysUpTime监控的问题
  20. mybatis什么时候用的${}

热门文章

  1. liferay如何在struts2中調用ajax
  2. 微软程序员利用测试账户套现千万美元,或面临 20 年监禁
  3. java jframe添加按钮_JFrame窗口中如何加按钮啊?(JDK)
  4. 未发现数据源名称_在Power BI中管理数据源Analysis Services
  5. 格雷码问题:输出当输入为n时的格雷码
  6. 《编程题》找出数组中出现次数超过一半的数(时间复杂度O(n),空间复杂度为O(1))
  7. java图像处理之实现任意角度图像旋转
  8. MMDB ip地址库操作
  9. Spring Cloud原理
  10. ON DUPLICATE KEY UPDATE 附带更新条件