跳转至

6. elk请求body

RequestBody与QueryDSL简介

  • 将查询语句通过HTTP requestbody发送给elasticsearch
POST /movie,404_idx/_search?ignore_unavailable=true
{
  "profile":true,
  "query":{
       "match_all":{}
    }
}
ignore_unavailable=true,可以忽略尝试访问不存在的索引“404_idx”导致的报错
  • 翻页

    "from":10,
    "to":20
    

  • 排序

最好在数字型与日期型字段上排序(sort)

POST kibana_sample_data_ecommerce/_search
{
  "sort":[{"order_date":"desc"}],
  "query":{
    "match_all": {}
  }

}
- source进行过滤需要的字段

POST kibana_sample_data_ecommerce/_search
{
  "_source":["order_date"],
  "query":{
    "match_all": {}
  }
}
- 脚本字段

新增计算出来的字段

GET kibana_sample_data_ecommerce/_search
{
  "script_fields": {
    "new_field": {
      "script": {
        "lang": "painless",
        "source": "doc['order_date'].value+'hello'"
      }
    }
  },
  "query": {
    "match_all": {}
  }
}
- match查询

默认是OR的关系
POST movies/_search
{
  "query": {
    "match": {
      "title": "last christmas"
    }
  }
}

#指定AND的关系
POST movies/_search
{
  "query": {
    "match": {
      "title": {
        "query": "last christmas",
        "operator": "and"
      }
    }
  }
}
- 短语搜索match_phrase

POST movies/_search
{
  "query": {
    "match_phrase": {
      "title":{
        "query": "one love",
        "slop": 1

      }
    }
  }
}

不加slop代表的意思是顺序搜索one love中间不能有其他字符
加上slop代表的意思是one love在搜索的时候中间可以添加其他字符,是搜索的内容变大,
到这里可以讲下match跟match_phrase的区别???

QueryString&SimpleQueryString查询

  • QueryString
类似URI查询
POST users/_search
{
  "query": {
    "query_string": {
      "default_field": "name",
      "query": "Ruan AND Yiming"
    }
  }
}

分组
POST users/_search
{
  "query": {
    "query_string": {
      "fields":["name","about"],
      "query": "(Ruan AND Yiming) OR (Java AND Elasticsearch)"
    }
  }
}
  • simple_query_string

1 会忽略错误只是支持部分语法

2 不支持AND NOT OR 会当作字符串处理

3 term直接默认是or 可以指定operator

4 支持部分逻辑

+and |OR -NOT

POST users/_search
{
  "query": {
    "simple_query_string": {
      "query": "Ruan Yiming",
      "fields": ["name"],
      "default_operator": "AND"
    }
  }
}