zoukankan      html  css  js  c++  java
  • Query DSL(1)

    https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl.html

    Query DSL

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

    查询的种类


    Elasticsearch提供基于JSON定义的查询语句。包含两种类型:

    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 过滤器上下文中,查询的结果可以被缓存。

  • 相关阅读:
    java设计模式演示样例
    一步一步写算法(之排序二叉树)
    收集经常使用的.net开源项目
    jdbc连接数据库
    Android开发系列(二十二):AdapterViewFlipper的功能和使用方法
    ProgressDialog使用总结
    HDU 4916 树分治
    [Unity3D]自制UnityForAndroid二维码扫描插件
    IOS ARC和非ARC文件混用
    让子弹飞Demo版
  • 原文地址:https://www.cnblogs.com/Dhouse/p/6102602.html
Copyright © 2011-2022 走看看