[toc]
实践007-elasticsearch查询之2-Request Body与DSL查询
1. 查询语句通过HTTP Request Body发送给ES
POST movies/_search?ignore_unavailable=true
{
"profile": "true",
"query": {
"match_all": {}
}
}
2. 分页:from+size
POST movies/_search?ignore_unavailable=true
{
"profile": "true",
"from": 0,
"size": 2,
"query": {
"match_all": {}
}
}
3. 排序:sort
POST movies/_search?ignore_unavailable=true
{
"profile": "true",
"from": 0,
"size": 5,
"sort": [
{
"year": "desc"
},
{
"title.keyword": "desc"
}
],
"query": {
"match_all": {}
}
}
4. source字段过滤:只返回需要的列
POST movies/_search?ignore_unavailable=true
{
"profile": "true",
"_source": [
"id",
"title",
"year"
],
"from": 0,
"size": 5,
"sort": [
{
"year": "desc"
},
{
"title.keyword": "desc"
}
],
"query": {
"match_all": {}
}
}
支持通配符*: _"source": [ "name*", "desc\*" ]
5. script_fields脚本字段:自加工结果
POST movies/_search
{
"from": 0,
"size": 5,
"sort": [
{
"year": {
"order": "desc"
}
},
{
"title.keyword": {
"order": "desc"
}
}
],
"script_fields": {
"year_and_title": {
"script": {
"lang": "painless",
"source": "doc['year'].value + '->' + doc['title.keyword'].value"
}
}
},
"query": {
"match_all": {}
}
}
title=When We First Met; year=2018;
year_and_title=year->title
【实践007-elasticsearch查询之2-Request Body与DSL查询】但是好像_source数据没了:
{
"took" : 10,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 9743,
"relation" : "eq"
},
"max_score" : null,
"hits" : [
{
"_index" : "movies",
"_type" : "_doc",
"_id" : "187717",
"_score" : null,
"fields" : {
"year_and_title" : [
"2018->Won't You Be My Neighbor?"
]
},
"sort" : [
2018,
"Won't You Be My Neighbor?"
]
},
{
"_index" : "movies",
"_type" : "_doc",
"_id" : "184015",
"_score" : null,
"fields" : {
"year_and_title" : [
"2018->When We First Met"
]
},
"sort" : [
2018,
"When We First Met"
]
},
{
"_index" : "movies",
"_type" : "_doc",
"_id" : "184471",
"_score" : null,
"fields" : {
"year_and_title" : [
"2018->Tomb Raider"
]
},
"sort" : [
2018,
"Tomb Raider"
]
},
{
"_index" : "movies",
"_type" : "_doc",
"_id" : "183959",
"_score" : null,
"fields" : {
"year_and_title" : [
"2018->Tom Segura: Disgraceful"
]
},
"sort" : [
2018,
"Tom Segura: Disgraceful"
]
},
{
"_index" : "movies",
"_type" : "_doc",
"_id" : "188833",
"_score" : null,
"fields" : {
"year_and_title" : [
"2018->The Man Who Killed Don Quixote"
]
},
"sort" : [
2018,
"The Man Who Killed Don Quixote"
]
}
]
}
}
6. match查询表达式: TermQuery 6.1 TermQuery
POST movies/_search
{
"query": {
"match": {
"title": "beautiful mind"
}
}
}
结果: 包含 beautiful 的(16条), 或 包含 mind 的(5条),共(20条):
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 20,
"relation" : "eq"
},
"max_score" : 13.687479,
"hits" : [
{
"_index" : "movies",
"_type" : "_doc",
"_id" : "4995",
"_score" : 13.687479,
"_source" : {
"id" : "4995",
"genre" : [
"Drama",
"Romance"
],
"title" : "Beautiful Mind, A",
"@version" : "1",
"year" : 2001
}
},
{
"_index" : "movies",
"_type" : "_doc",
"_id" : "3912",
"_score" : 8.723258,
"_source" : {
"id" : "3912",
"genre" : [
"Comedy",
"Drama"
],
"title" : "Beautiful",
"@version" : "1",
"year" : 2000
}
},
{
"_index" : "movies",
"_type" : "_doc",
"_id" : "47404",
"_score" : 8.576847,
"_source" : {
"id" : "47404",
"genre" : [
"Adventure",
"Animation",
"Comedy",
"Fantasy",
"Romance",
"Sci-Fi"
],
"title" : "Mind Game",
"@version" : "1",
"year" : 2004
}
},
{
"_index" : "movies",
"_type" : "_doc",
"_id" : "1046",
"_score" : 7.317063,
"_source" : {
"id" : "1046",
"genre" : [
"Drama",
"Romance"
],
"title" : "Beautiful Thing",
"@version" : "1",
"year" : 1996
}
},
{
"_index" : "movies",
"_type" : "_doc",
"_id" : "94",
"_score" : 7.317063,
"_source" : {
"id" : "94",
"genre" : [
"Comedy",
"Drama",
"Romance"
],
"title" : "Beautiful Girls",
"@version" : "1",
"year" : 1996
}
},
{
"_index" : "movies",
"_type" : "_doc",
"_id" : "4242",
"_score" : 7.317063,
"_source" : {
"id" : "4242",
"genre" : [
"Comedy",
"Crime",
"Drama",
"Thriller"
],
"title" : "Beautiful Creatures",
"@version" : "1",
"year" : 2000
}
},
{
"_index" : "movies",
"_type" : "_doc",
"_id" : "4372",
"_score" : 7.317063,
"_source" : {
"id" : "4372",
"genre" : [
"Drama",
"Romance"
],
"title" : "Crazy/Beautiful",
"@version" : "1",
"year" : 2001
}
},
{
"_index" : "movies",
"_type" : "_doc",
"_id" : "3302",
"_score" : 7.317063,
"_source" : {
"id" : "3302",
"genre" : [
"Comedy"
],
"title" : "Beautiful People",
"@version" : "1",
"year" : 1999
}
},
{
"_index" : "movies",
"_type" : "_doc",
"_id" : "90353",
"_score" : 7.317063,
"_source" : {
"id" : "90353",
"genre" : [
"Drama"
],
"title" : "Beautiful Boy",
"@version" : "1",
"year" : 2010
}
},
{
"_index" : "movies",
"_type" : "_doc",
"_id" : "100487",
"_score" : 7.317063,
"_source" : {
"id" : "100487",
"genre" : [
"Drama",
"Fantasy",
"Romance"
],
"title" : "Beautiful Creatures",
"@version" : "1",
"year" : 2013
}
}
]
}
}
6.2 TermQuery+AND/OR/NOT
POST movies/_search
{
"query": {
"match": {
"title": {
"query": "beautiful mind",
"operator": "and"
}
}
}
}
- operator: and/or/not 对"query"的词条做限制逻辑关系,加上
and
后,便只有一个记录:
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 13.687479,
"hits" : [
{
"_index" : "movies",
"_type" : "_doc",
"_id" : "4995",
"_score" : 13.687479,
"_source" : {
"id" : "4995",
"genre" : [
"Drama",
"Romance"
],
"title" : "Beautiful Mind, A",
"@version" : "1",
"year" : 2001
}
}
]
}
}
7.match_phrase查询表达式:PhraseQuery 7.1 PhraseQuery
POST movies/_search
{
"query": {
"match_phrase": {
"title": {
"query": "beautiful mind"
}
}
}
}
#// 或者下面形式都可
POST movies/_search
{
"query": {
"match_phrase": {
"title": "beautiful mind"
}
}
}
结果就只有一条, 因为是PhraseQuery: 既要求分词,又要求顺序;
7.2 PhraseQuery+slop
- slop /sl>p/ n.脏水,淡而无味的半流质食物;泔水
POST movies/_search
{
"query": {
"match_phrase": {
"title": {
"query": "friday part",
"slop": 2
}
}
}
}
slop=2, 就是允许
friday
和 part
中间 掺和 2个杂词(不相关的任意词)推荐阅读
- 实践006-elasticsearch查询之1-URI Search查询
- (转)Elasticsearch索引mapping的写入查看与修改
- 实践005-elasticsearch的Search API概览
- 中间件|Elasticsearch专栏-5.es基本用法-分词查询
- ElasticsearchNEST高级客户端--Mapping映射
- 实践004-elasticsearch之Index Template和Dynamic Template
- elasticsearch mapping
- ElasticSearch5.4.3离线搭建
- spring data整合elasticsearch的applicationContext.xml文件模板