zoukankan      html  css  js  c++  java
  • Elasticsearch query和filter的区别

    1、关于Query context和filter context

    查询语句的表现行为取决于使用了查询上下文方式还是过滤上下文方式。

    Query context:查询上下文,回答了“文档是如何被查询语句匹配的”,此外,也决定了文档是否被匹配上,查询语句也通过计算_score的值来说明文档的匹配度。query context查询方式是通过传递query参数来实现。
    Filter context:过滤上下文,回答了“文档是不是匹配?”,答案一般都是简单的是和否,并不计算_scores的值,过滤上下文查询方式大多用于过滤结构化数据,例如:
    • 时间戳(timestamp)是否在2015到2016之间?
    • 状态(status)是否是(确切)“published”?
    过滤上下文通过在bool查询中传递filter或must_not参与来起作用,或者在constant_score查询,或在filter聚合中起作用。
    例如:
    GET /_search
    {
      "query": { #query参数说明是query上下文
        "bool": { #bool和两个match子句在query上下文中,意味着他们使用score来计算如何与文档匹配。
          "must": [
            { "match": { "title":   "Search"        }}, 
            { "match": { "content": "Elasticsearch" }}  
          ],
          "filter": [ #filter参数说明是filter上下文
            { "term":  { "status": "published" }}, # term和range应用于filter上下文,它们将过滤不匹配的文档,但不会影响匹配文档的score值。
            { "range": { "publish_date": { "gte": "2015-01-01" }}} 
          ]
        }
      }
    }

    tip:所以,在需要用score来匹配文档的情况下使用query context,其他情况使用filter context。

  • 相关阅读:
    JDK JRE Java虚拟机的关系
    apache和tomcat区别
    JBoss Web和 Tomcat的区别
    SOAP 与 restful service区别
    IntelliJ Idea 常用快捷键列表
    Win7用户文件夹转移
    相同IP和Mac地址的问题
    WebDriver 浅析
    Web UI 自动化测试
    python中xlrd模块的使用
  • 原文地址:https://www.cnblogs.com/asker009/p/10174973.html
Copyright © 2011-2022 走看看