本节主要讲解 Elasticsearch 的 搜索相关功能 Search-API,讲解什么是 URL Search 和 Request Body Search 的语法,对经常使用的语法都会一一进行详细介绍。html
1.Search APIless
Search API 分为两大类一个是 URL Search 和 Request Body Search。学习
2.URL Search3d
GET /movies/_search?q=love&df=title&sort=year:desc&from=0&size=10&timeout=1s { "profile":"true" }
2.1Query String Syntaxcode
2.1.1TermQueryorm
GET /movies/_search?q=title:(Beautiful Mind) { "profile":"true" }
输出为有 Beautiful 或者 Mind 的电影名称htm
2.1.2PhraseQueryblog
GET /movies/_search?q=title:"Beautiful Mind" { "profile":"true" }
输出为按照顺序同时出现 "Beautiful Mind" 这个词语的电影名称排序
TermQuery 必须带有 () ,好比 (Beautiful Mind),不带的状况是不同的。索引
GET /movies/_search?q=title:(Beautiful Mind)
Mind 为泛查询,对全部字段都进行查询
2.1.3布尔查询
GET /movies/_search?q=title:(Beautiful OR Mind) { "profile":"true" }
里面执行是 BooleanQuery,最后仍是以 TermQuery 进行分组查询。
2.1.4范围查询
GET /movies/_search?q= year:[2018 TO 2019] { "profile":"true" }
2.1.5算数查询
GET /movies/_search?q=year:>=2018 { "profile":"true" }
2.1.6通配符和正则匹配
GET /movies/_search?q=title:b*
2.1.7模糊查询
GET /movies/_search?q=title:"Avengers War"~2
3.Request Body Search
其实在高阶使用方法上只有 Request Body Search 才能实现,因此也是推荐使用这种方法查询学习。
Request Body Search 将查询语句经过经过 HTTP 方式发送到 ES,进行查询
3.1Query DSL
POST kibana_sample_data_ecommerce/_search { "profile": true, "_source":["customer_first_name","customer_full_name","customer_gender"], "from":10, "size":20, "sort":[{"order_date":"desc"}], "query": { "match_all": {}//查询全部文档 } }
3.2脚本字段
脚本字段简单说经过 ES 的 painless 脚本去算出一个新的字段。这个有什么用处呢?当你要对一个列排序,发现存储的有不一样的单位,须要转换以后才能作一个统一的排序。
GET kibana_sample_data_ecommerce/_search { "script_fields": { "new_field": { "script": { "lang": "painless", "source": "doc['customer_id']+'_2333333!'" } } }, "query": { "match_all": {} } }
脚本字段不要选择文本类型,默认禁止,能够经过设置 fielddata = true 开启,不建议。
3.3Match 查询表达式
前面 URL Search 中讲解 Term 和 Phrase 查询,如今咱们来看在 Request Body Search 是怎么实现。
POST movies/_search { "query": { "match": { "title": "Who Last" } } }
若是你要要求 Who Last 要同时出现,增长 "operator": "and" 实现。
POST movies/_search { "query": { "match": { "title": { "query": "Who Christmas", "operator": "and" } } } }
3.4Match Phrase
POST movies/_search { "query": { "match_phrase": { "title": { "query": "Who Christmas" } } } }
POST movies/_search { "query": { "match_phrase": { "title": { "query": "Who Christmas", "slop": 1 } } } }
4.小结
本篇主要对 Search-Api 的 URL Search 和 Request Body Search 详细介绍,URL Search 和 Request Body Search 均可以简单方便查询咱们想要的结果, 那么咱们应该采用哪一种方式进行查询呢?在简单的进行查询两种方式没有什么区别,可是在 ES 中高级使用方法只能在 Request Body Search 中作,全部这里也是推荐学习和使用这种方法,对 Request Body Search 高阶使用的方法会在以后的章节进行讲解。
5.数据来源
kibana_sample_data_ecommerce 索引是 kibana 自带的索引,须要手动在 kibana 进行点击导入
movies 索引是 movielens 数据集,经过https://grouplens.org/datasets/movielens/ 这个地址下载。经过 Logstash 导入。logstash.conf 和 数据文件在公众号后台回复 ES 获取。
【Elasticsearch 7 探索之路】(四)Analyzer 分析
【Elasticsearch 7 探索之路】(三)倒排索引
【Elasticsearch 7 探索之路】(二)文档的 CRUD 和批量操做
【Elasticsearch 7 搜索之路】(一)什么是 Elasticsearch?