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:结合其它真值查询,通常和must\should\must_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
    }
  }
}
posted @ 2019-09-05 21:02  江湖凶险  阅读(1603)  评论(0编辑  收藏  举报