美文网首页
3.8-RequestBody与QueryDSL简介

3.8-RequestBody与QueryDSL简介

作者: 落日彼岸 | 来源:发表于2020-03-17 15:41 被阅读0次

Request Body Search

  • 将查询语句通过HTTP Request Body发送给ElasticSearch

  • Query DSL

POST /movies,404_idx/_search?ignore_unavailable=true
{
 "profile": true,
 "query": {
 "match_all": {}
 }
}

分页

POST /kibana_sample_data_ecommerce/_search
{
 "from":10,
 "size":20,//(此处查询20个结果)
 "query":{
 "match_all": {}
 }
}
  • from 从0开始,默认返回10个结果

  • 获取靠后的翻页成本较高

排序

POST kibana_sample_data_ecommerce/_search
{
 "sort":[{"order_date":"desc"}],
 "query":{
 "match_all": {}
 }
}
  • 最好在"数字型"与"日期型"字段上排序

  • 因为对于多值类型或分析过的字段排序,系统会选一个值,无法得知该值

_source filtering

#source filtering
POST kibana_sample_data_ecommerce/_search
{
 "_source":["order_date","user*","category.keyword"],
 "from":10,
 "size":5,
 "query":{
 "match_all": {}
 }
}

#返回结果
"hits" : [
      {
        "_index" : "kibana_sample_data_ecommerce",
        "_type" : "_doc",
        "_id" : "Ys9u0nABbRdUz8AoIfBO",
        "_score" : 1.0,
        "_source" : {
          "order_date" : "2020-03-16T10:46:34+00:00",
          "user" : "rabbia"
        }
      },
  • 如果_source没有存储,那就只返回匹配的文档的元数据

  • _source支持使用通配符,_source["name","desc"]

脚本字段

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

#返回结果
"hits" : [
      {
        "_index" : "kibana_sample_data_ecommerce",
        "_type" : "_doc",
        "_id" : "WM9u0nABbRdUz8AoIfBN",
        "_score" : 1.0,
        "fields" : {
          "new_field" : [
            "2020-03-23T09:28:48.000Zhello"
          ]
        }
      },
  • 用例:订单中有不同的汇率,需要结合汇率对订单价格进行排序

使用查询表达式 - Match

POST movies/_search
{
  "query": {
    "match": {
      "title": "last christmas" #OR
    }
  }
}

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,#允许一个空格字符

      }
    }
  }
}

课程Demo

  • 需要通过 Kibana 导入Sample Data的电商数据。具体参考“2.2节-Kibana的安装与界面快速浏览”
  • 需导入Movie测试数据,具体参考“2.4-Logstash安装与导入数据”
#ignore_unavailable=true,可以忽略尝试访问不存在的索引“404_idx”导致的报错
#查询movies分页
POST /movies,404_idx/_search?ignore_unavailable=true
{
  "profile": true,
    "query": {
        "match_all": {}
    }
}

POST /kibana_sample_data_ecommerce/_search
{
  "from":10,
  "size":20,
  "query":{
    "match_all": {}
  }
}


#对日期排序
POST kibana_sample_data_ecommerce/_search
{
  "sort":[{"order_date":"desc"}],
  "query":{
    "match_all": {}
  }

}

#source filtering
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": {}
  }
}


POST movies/_search
{
  "query": {
    "match": {
      "title": "last christmas"
    }
  }
}

POST movies/_search
{
  "query": {
    "match": {
      "title": {
        "query": "last christmas",
        "operator": "and"
      }
    }
  }
}

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

      }
    }
  }
}

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

      }
    }
  }
}

相关阅读

相关文章

网友评论

      本文标题:3.8-RequestBody与QueryDSL简介

      本文链接:https://www.haomeiwen.com/subject/jzytyhtx.html