• Elasticsearch 查询与过滤


    简介

    Elasticsearch 使用的查询语言(DSL)拥有一套查询组件,这些组件可以以无限组合的方式进行搭配。这套组件可以在以下两种情况下使用:过滤上下文(filtering context)和查询上下文(query context)。

    说明

    当使用于过滤上下文时,查询被设置成一个“不评分”或者“过滤”查询。即这个查询只是简单的问一个问题:“这篇文档是否匹配?”。回答也是非常的简单,yes 或者 no ,二者必居其一。

    典型用法

    created 时间是否在 2013 与 2014 这个区间?
    status 字段是否包含 published 这个单词?
    lat_lon 字段表示的位置是否在指定点的 10km 范围内?
    

    当使用于查询上下文时,查询就变成了一个“评分”的查询。和不评分的查询类似,也要去判断这个文档是否匹配,同时它还需要判断这个文档匹配的有 多好(匹配程度如何)。

    性能差异

    过滤查询(Filtering queries)只是简单的检查包含或者排除,这就使得计算起来非常快。考虑到至少有一个过滤查询(filtering query)的结果是 “稀少的”(很少匹配的文档),并且经常使用不评分查询(non-scoring queries),结果会被缓存到内存中以便快速读取,所以有各种各样的手段来优化查询结果。

    相反,评分查询(scoring queries)不仅仅要找出匹配的文档,还要计算每个匹配文档的相关性,计算相关性使得它们比不评分查询费力的多。同时,查询结果并不缓存。

    语法

    query的基础语法

    GET movies/_search
    {
      "query": {
        "match": {
          "title": {
            "query": "beautiful"
          }
        }
      }
    }
    

    filter的语法,一般跟着constant_score、bool

    GET movies/_search
    {
      "query": {
        "constant_score": {
          "filter": {
            "term": {
              "title": "beautiful"
            }
          }
        }
      }
    }
    
    GET movies/_search
    {
      "query": {
        "bool": {
          "filter": [
            {
              "term": {
                "title": "beautiful"
              }
            },
            {
              "range": {
                "movieId": {
                  "gte": 94,
                  "lte": 1000
                }
              }
            }
          ]
        }
      }
    }
    

    如何选择查询与过滤

    通常的规则是,使用查询(query)语句来进行全文搜索或者其它任何需要影响相关性得分的搜索。除此以外的情况都使用过滤(filters)。

    资料

    __EOF__

     


     

    欢迎转载,但请注明出处!
    欢迎大家一起交流学习!如果有什么疑问,大家可以在评论区一起交流!
    如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是我的最大动力!

  • 相关阅读:
    [转] jQuery 操作 JSON 数据
    [转] 8张图学习javascript
    HTML文档类型声明的坑...
    Android 应用内HttpClient 与 WebView 共享 Cookie
    李嘉诚无锡演讲
    keytool 生成 Android SSL 使用的 BKS
    LeetCode-344-反转字符串
    LeetCode-342-4的幂
    LeetCode-338-比特位计数
    LeetCode-326-3的幂
  • 原文地址:https://www.cnblogs.com/powercto/p/14528796.html
Copyright © 2020-2023  润新知