zoukankan      html  css  js  c++  java
  • ES 搜索(4)——Query DSL及query context VS filter context

    Elasticsearch提供基于JSON的完整查询DSL(Domain Specific Language)来定义查询。

    Query DSL 由两种子句构成:

    1.叶子查询子句:

        在特定field中查询特定的值,如match、term、range查询等,这些叶子查询子句可以单独使用。

    2.复合查询子句:

        复合查询子句包裹叶子查询子句,也可以嵌套复合查询子句,按逻辑组合查询结果,如bool、dis_max,或者改变查询规则,如constant_score 查询。

     Query上下文 VS Filter上下文:查询子句的行为取决于query还是filter。

    1.query context:query要做的事情是判断该文档如何匹配查询语句,这样的查询语句会计算一个得分(_score)表示该文档与其他文档的匹配度。查询语句传入query参数时查询有效。

    GET /_search
    {
        "query" : {
            "term" : { "user" : "kimchy" }
        }
    }

    2.filter context :filter要做的事情是判断该文档是否匹配该查询语句,要么是,要么否,不计算得分,通常用来过滤结构化数据,如是否在2016-2018时间范围内,status是否是published状态等。过滤查询的结果通常会自动缓存,加快查询。传入filter参数时,查询有效,如:bool查询中的filter或must_not参数,constant_score中的filter参数,filter aggregation等。

    #query 指定是query context;bool中的两个match查询相关内容,决定文档的匹配度;filter过滤掉不符合条件的文档,但是不影响匹配文档的得分。
    curl -XGET 'localhost:9200/_search?pretty' -H 'Content-Type: application/json' -d' { "query": { "bool": { "must": [ { "match": { "title": "Search" }}, { "match": { "content": "Elasticsearch" }} ], "filter": [ { "term": { "status": "published" }}, { "range": { "publish_date": { "gte": "2015-01-01" }}} ] } } } '
  • 相关阅读:
    JAVA基础-多态
    JAVA基础-- 对象转型 (casting)
    Flutter: 下拉刷新,上拉加载更多
    Flutter 创建dashboard页面
    Android Studio 3.3.1 向avd模拟器发送本地文件
    Flutter 真机调试
    android adb命令,向开发手机添加文件
    获取用户在web页面上选中的文本
    Cheat Engine 6.8 设置中文
    Flutter 编写内联文本
  • 原文地址:https://www.cnblogs.com/zhxdxf/p/8398110.html
Copyright © 2011-2022 走看看