Elasticsearch Request Body与Query DSL简介 电脑版发表于:2020/9/20 16:54 ![elasticsearch](https://img.tnblog.net/arcimg/hb/5f1adabe8df94fdb8331eb80e393c4a3.jpeg "elasticsearch") >#Elasticsearch Request Body与Query DSL简介 [TOC] Request Body Search ------------ >- 将查询语句通过 HTTP Resquest Body 发送给 Elasticsearch <br/> >- Query DSL ```bash POST /movies,404_idx/_search?ignore_unavailable=true { "profile": true, "query": { "match_all": {} } } ``` 分页 ------------ ```bash POST /kibana_sample_data_ecommerce/_search { "from": 10, "size": 20, "query": { "match_all": {} } } ``` tn>From从下标10开始,获取20个结果,获取考后的翻页成本较高。 排序 ------------ tn>对`order_date`进行倒序 ```bash GET /kibana_sample_data_ecommerce/_search { "sort":[{"order_date":"desc"}], "from": 10, "size": 20, "query": { "match_all": {} } } ``` >1. 最好在“数字型”与“日期型”字段上排序。 2. 因为对于多值类型或分析过的字段排序,系统会选一个值,无法得知该值。 搜索结果过滤 ------------ tn>这里只需要数据中的`order_date`,`name`,`category.keyword`的值。 ```bash GET /kibana_sample_data_ecommerce/_search { "_source":["order_date","name","category.keyword"], "from": 10, "size": 20, "query": { "match_all": {} } } ``` >- 如果 _source 没有存储,那就只返回匹配的文档的元数据 - _source 支持使用通配符 _source["name*","desc*"] 脚本字段 ------------ tn>查询出自定义拼接出的值 ```bash GET /kibana_sample_data_ecommerce/_search { "script_fields": { "new_field": { "script": { "lang": "painless", "source":"doc['order_date'].value+'hello'" } } }, "from": 10, "size": 20, "query": { "match_all": {} } } ``` >一般可以用于订单中有不同的汇率,需要结合汇率对订单价格进行排序 使用查询表达式 - Match(Or 与 And) ------------ tn>`Or`的用法,在下列举例中查询时是`Last` or `Christmas` 的关系 ```bash GET /comments/_doc/_search { "query":{ "match":{ "comment":"Last Christmas" } } } ``` tn>`And`的用法,在下列举例中查询时是`Last` And `Christmas` 的关系,且不能更改顺序。 ```bash GET /comments/_doc/_search { "query":{ "match":{ "comment": { "query":"Last Christmas", "operator":"AND" } } } } ``` 短语搜索 - Match Phrase ------------ tn>还有一种,在comment下添加参数如`"slop": 1`表示中间可以有一个其他单词或字存在 ```bash GET /comments/_doc/_search { "query":{ "match_phrase":{ "comment": { "query":"Last Christmas", "slop": 1 } } } } ```