zoukankan      html  css  js  c++  java
  • query语法

    一、DSL方式的query语法

    查询常用的关键字如下:

    1 query (基于文档相关性的全文搜索)

    term:精确匹配,不会对查询词进行分词。下面的示例返回message="loadUserByUsername error"的文档。

    GET xxx/_search
    {
      "query": {
        "term": {
          "message.keyword": {
            "value": "loadUserByUsername error"
          }
        }
      }
    }

    match:首先会对查询词进行分词,然后再匹配。下面的示例返回message中含有"filter" 或者 "error"的所有文档。

    GET xxx/_search
    {
      "query": {
        "match": {
          "message": "filter error"
        }
      }
    }

    match_phrase:被查询词作为一个短语,不会将查询短语拆开。下面的示例返回message="filter error"的文档。

    GET xxx/_search
    {
      "query": {
        "match_phrase": {
          "message": "filter error"
        }
      }
    }

    wildcard:模糊匹配。* 代表一个或多个字符。该字段默认是分词的,若想要不分词查询,需要对查询字段进行field.keyword。

    GET searchcenter-prod-log-2019.12.03/_search
    {
      "query": {
        "wildcard": {
          "url.keyword": "/api/m/auth/v1/n/sms/send"
        }
      }
    }

    match_phrase_prefix:查询短语前缀匹配,它与match_phrase的区别在于,它可以匹配"查询短语+其它内容"的内容。

    GET xxx/_search
    {
      "query": {
        "match_phrase_prefix": {
          "message": "loadUser"
        }
      },
      "_source": ["message", "@timestamp"],
      "from": 0
    }

    bool:结合其它真值查询,通常和mustshouldmust_not(与或非)一起组合出复杂的查询。

    must:与的关系,表示必须同时满足must下的所有条件。

    GET xxx/_search
    {
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "message": "eureka"
              }
            },
            {
              "match": {
                "message": "via"
              }
            }
          ]
        }
      }
    }

    should:或的关系,表示满足should下的任意一个条件即可。

    GET xxx/_search
    {
      "query": {
        "bool": {
          "should": [
            {
              "match": {
                "message": "filter"
              }
            },
            {
              "match": {
                "message": "error"
              }
            }
          ]
        }
      }
    }

    must_not:非的关系,表示必须同时不满足must_not下的所有条件才行。

    GET xxx/_search
    {
      "query": {
        "bool": {
          "must_not": [
            {
              "match": {
                "message": "filter"
              }
            },
            {
              "match": {
                "message": "error"
              }
            }
          ]
        }
      }
    }

    2 sort  根据某个字段排序 

    GET xxx/_search
    {
      "query": {
        "match": {
          "message": "error"
        }
      },
      "sort": [
        {
          "@timestamp": {
            "order": "desc"
          }
        }
      ]
    }

    3 _source 

    指定查询结果中展示的字段。  "_source": ["a", "b"]

    GET xxx/_search
    {
      "query": {
        "match": {
          "message": "error"
        }
      },
      "sort": [
        {
          "@timestamp": {
            "order": "desc"
          }
        }
      ],
      "_source": ["message", "@timestamp"]
    }

    4 size 

    指定检索结果输出的条数,不设定时默认为10。   "size": 20

    GET xxx/_search
    {
      "query": {
        "match": {
          "message": "error"
        }
      },
      "_source": ["message", "@timestamp"],
      "size": 20
    }

    5 from 

    以一定的偏移量来检索我们的数据,缺省时默认为0(从检索的第一条数据开始)。"from": 10

    GET xxx/_search
    {
      "query": {
        "match": {
          "message": "error"
        }
      },
      "_source": ["message", "@timestamp"],
      "from": 100
    }

    二、filter过滤

    不需要计算相关度分数,搜索效率高。

    range:范围查询,通过一定范围的值来过滤文档。

    GET xxx/_search
    {
      "query": {
        "bool": {
          "filter": {
            "range": {
              "@timestamp": {
                "gte": "2019-09-11T05:20:36.622Z",
                "lte": "2019-09-11T05:24:36.622Z"
              }
            }
          }
        }
      }
    }
    {
        "query": {
            "bool": {
                "must": [{
                    "range": {
                        "updateTime": {
                            "gt": "1590559150406",
                            "lt": "1600559150406"
                        }
                    }
                }],
                "must_not": [],
                "should": []
            }
        },
        "from": 0,
        "size": 250,
        "sort": [],
        "aggs": {
            
        }
    }

    exists:匹配那些指定字段中至少包含一个非null值的文档。 Returns documents that have at least one non-null value in the original field。

    GET xxx/_search
    {
      "query": {
        "bool": {
          "filter": {
            "exists": {
              "field": "@timestamp"
            }
          }
        }
      }
    }

    二、根据查询条件局部更新文档

    host:ip/index/_update_by_query  POST
    
    
    {
      "script": {
        "source": "ctx._source['relateId']=382;"
      },
      "query": {
        "term": {
          "activityId": 746002
        }
      }
    }
  • 相关阅读:
    面试官:软件测试没搞懂这些,哪里来的自信投简历? 刁钻问得高频的面试题(含答案)
    软件测试行业的职业素养?——《高级软件测试-高级软件测试分析师》第一章
    什么?你正在学web自动化测试?那这些Selenium的基本操作你了解过吗?
    没想到 Google 排名第一的编程语言,为什么会这么火?
    为什么大家都在用Fiddler?
    看了很多文章,就这篇说明白了什么是接口测试(含视频教程)
    Win 10 安裝 Docker 及相關設置
    Dynamics CRM
    Dynamics CRM
    Dynamics CRM
  • 原文地址:https://www.cnblogs.com/mydesky2012/p/11469767.html
Copyright © 2011-2022 走看看