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

Query DSL 与 Filter DSL

DSL查询语言中存在两种:查询DSL(query DSL)和过滤DSL(filter DSL)。

它们两个的区别如下图:

query DSL

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

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

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

一些query的场景:

  • 与full text search的匹配度最高
  • 包含run单词,如果包含这些单词:runs、running、jog、sprint,也被视为包含run单词
  • 包含quick、brown、fox。这些词越接近,这份文档的相关性就越高

filter DSL

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

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

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

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

一些过滤的情况:

  • 创建日期是否在2013-2014年间?
  • status字段是否为published?
  • lat_lon字段是否在某个坐标的10公里范围内?

参考: http://www.cnblogs.com/xing901022/p/4975931.html

下图的查询就是一个组合查询, 既有 filter 也有 query:

http://xiaorui.cc/2015/11/09/elasticsearch%E7%9A%84%E6%9F%A5%E8%AF%A2%E5%99%A8query%E4%B8%8E%E8%BF%87%E6%BB%A4%E5%99%A8filter%E7%9A%84%E5%8C%BA%E5%88%AB/

上面文章提供了一个测试例子。

  • query语句查询结果,第一次查询用了300ms,第二次用了280ms.
  • filter查询出来的结果,第一次查询时间是280ms,第二次130ms。

具体如何写 查询和 过滤并存的请看下面这篇文章:

查询与过滤条件的合并 
http://es.xiaoleilu.com/054_Query_DSL/75_Queries_with_filters.html

比如说我们有这样一条查询语句,获取右键内容中带“business opportunity”  的:


    "match": { 
        "email": "business opportunity" 
    } 
}

然后我们想要让这条语句加入 term 过滤,只在收信箱中匹配邮件:


    "term": { 
        "folder": "inbox" 
    } 
}

search API中只能包含 query 语句,所以我们需要用 filtered 来同时包含 "query" 和 "filter" 子句:


    "filtered": { 
        "query":  { "match": { "email": "business opportunity" }}, 
        "filter": { "term":  { "folder": "inbox" }} 
    } 
}

我们在外层再加入 query 的上下文关系:

GET /_search 

    "query": { 
        "filtered": { 
            "query":  { "match": { "email": "business opportunity" }}, 
            "filter": { "term": { "folder": "inbox" }} 
        } 
    } 
}

ES中的Query与Filter的区别相关推荐

  1. java post和put的区别,ES 中的 POST 和 PUT 的区别

    0.什么是Restful架构 比较难说清楚,这部分大雾状态,引ruanyf 理解RESTful架构 的几句总结吧: Fielding将他对互联网软件的架构原则,定名为REST,即Representat ...

  2. doc es 中type_ElasticSearch: Index 和 Type 的区别

    原文: Index vs. Type By Adrien Grand 译者: fengchang 对于 ES 的新用户来说,有一个常见的问题:要存储一批新的数据时,应该在已有 index 里新建一个 ...

  3. es的query及filter

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

  4. Elasticsearch DSL中Query与Filter的不同

    Elasticsearch支持很多查询方式,其中一种就是DSL,它是把请求写在JSON里面,然后进行相关的查询. 举个DSL例子 GET _search {"query": { & ...

  5. ES中term、terms、match的区别

    ES中term.terms.match的区别 term query会去倒排索引中寻找确切的term,它并不知道分词器的存在,这种查询适合keyword.numeric.date等明确值的 term:查 ...

  6. Springmvc中的拦截器interceptor及与过滤器filter的区别

    一.Springmvc中的拦截器概述及与过滤器filter的区别 1).Springmvc中的拦截器interceptor用于对控制器controller进行预处理和后处理的技术; 2).可以定义拦截 ...

  7. JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别

    JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别 如果从整个项目中看,一个servlet请求的执行过程就变成了这样context-param–>lis ...

  8. es过滤指定数据 java_elasticsearch 结构化搜索_在案例中实战基于range filter来进行范围过滤...

    课程大纲 1.为帖子数据增加浏览量的字段 POST /forum/article/_bulk { "update": { "_id": "1" ...

  9. elasticsearch的查询器query与过滤器filter的区别

    很多刚学elasticsearch的人对于查询方面很是苦恼,说实话es的查询语法真心不简单-  当然你如果入门之后,会发现elasticsearch的rest api设计是多么有意思. 说正题,ela ...

最新文章

  1. 【c语言】求最大公约数
  2. UA MATH567 高维统计II 随机向量3 常见的高维随机向量的分布
  3. ASA8.4policy-map接口和全局执行的优先级测试:
  4. 楼宇计算机网络是如何工作的,【干货】建筑楼宇智能化如何应用 4C 技术
  5. 如何拿到半数面试公司Offer——我的Python求职之路
  6. Linux运维问题解决(1)——Linux 定时任务 crontab 配置及示例
  7. CCProgressTimer进度条效果
  8. python语言入门t_Python基础学习
  9. qnap自带有mysql吗_关于威联通QNAP NAS应用—Container Station 容器套件
  10. 修改Maven本地仓库路径,IDEA修改maven位置
  11. JSONP原理及实现
  12. linux远程桌面rdesktop,Linux下通过rdesktop连接Windows远程桌面
  13. SpringBoot逻辑删除
  14. mac换硬盘重装系统记录
  15. 如何清理占用计算机内存,win7系统清理电脑内存的操作方法
  16. 第十四周 项目1 - 验证算法
  17. 10大主流压力/负载/性能测试工具推荐
  18. opencv与PIL互转
  19. 《穆斯林的葬礼》读后感
  20. RocketMQ报错提示logics disk maybe full soon, so reclaim space, -1.0

热门文章

  1. 汉明码原理解析(清晰实例讲解)
  2. 查验微信封域名php,如何检测域名网址是否被微信封 微信域名检测接口的实现解析...
  3. 计算机专业技术业绩,计算机专业职称业绩怎么写
  4. 一夜之间多翻空,PP多单止盈,棉花认沽大涨,CCS05季节性下跌2022.2.25
  5. java 主动销毁session,关于java:问题Session的销毁方式到底有哪些
  6. 软件测试人员棘手的问题,一个很棘手的问题,为什么人员全检后还有不良?
  7. Facebook社交业务进军中国内地,困难重重
  8. 架设时间同步服务器/开机自动同步系统时间
  9. Linux下安装Python,并在Linux下运行python代码文件
  10. 查看计算机屏幕颜色软件,怎么查看电脑屏幕的颜色的红绿蓝值 查看电脑屏幕的颜色的红绿蓝值的方法...