1、一个例子让你明白什么是Query DSL
就是在query中可以设置query的类型
match_all:查询所有
match: 指定单个字段条件匹配查询
GET /_search
{
"query": {
"match_all": {}
}
}
GET /test_index/_search
{
"query": {
"match_all": {}
}
}
响应结果
{
"took": 8,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 9,
"max_score": 1,
"hits": [
{
"_index": "test_index",
"_type": "test_type",
"_id": "8",
"_score": 1,
"_source": {
"test_field": "test client 2"
}
},
{
"_index": "test_index",
"_type": "test_type",
"_id": "10",
"_score": 1,
"_source": {
"test_field1": "test1",
"test_field2": "updated test2"
}
},
{
"_index": "test_index",
"_type": "test_type",
"_id": "12",
"_score": 1,
"_source": {
"test_field": "test12"
}
},
{
"_index": "test_index",
"_type": "test_type",
"_id": "4",
"_score": 1,
"_source": {
"test_field1": "test field111111"
}
},
{
"_index": "test_index",
"_type": "test_type",
"_id": "6",
"_score": 1,
"_source": {
"test_field": "test test"
}
},
{
"_index": "test_index",
"_type": "test_type",
"_id": "2",
"_score": 1,
"_source": {
"test_field": "replaced test2"
}
},
{
"_index": "test_index",
"_type": "test_type",
"_id": "7",
"_score": 1,
"_source": {
"test_field": "test client 2"
}
},
{
"_index": "test_index",
"_type": "test_type",
"_id": "1",
"_score": 1,
"_source": {
"test_field1": "test field1",
"test_field2": "bulk test1"
}
},
{
"_index": "test_index",
"_type": "test_type",
"_id": "11",
"_score": 1,
"_source": {
"num": 1,
"tags": []
}
}
]
}
}
2、Query DSL的基本语法
语法1 QUERY_NAME:{}
{
QUERY_NAME: {
ARGUMENT: VALUE,
ARGUMENT: VALUE,...
}
}
语法2 QUERY_NAME:{FIELD_NAME:{}}
{
QUERY_NAME: {
FIELD_NAME: {
ARGUMENT: VALUE,
ARGUMENT: VALUE,...
}
}
}
示例:查出test_field字段中含有test的document
GET /test_index/test_type/_search
{
"query": {
"match": {
"test_field": "test"
}
}
}
响应结果
{
"took": 39,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 0.8835016,
"hits": [
{
"_index": "test_index",
"_type": "test_type",
"_id": "6",
"_score": 0.8835016,
"_source": {
"test_field": "test test"
}
},
{
"_index": "test_index",
"_type": "test_type",
"_id": "8",
"_score": 0.49191087,
"_source": {
"test_field": "test client 2"
}
},
{
"_index": "test_index",
"_type": "test_type",
"_id": "7",
"_score": 0.25316024,
"_source": {
"test_field": "test client 2"
}
}
]
}
}
3、如何组合多个搜索条件
组合查询需要用到bool
搜索需求:title必须包含elasticsearch,content可以包含elasticsearch也可以不包含,author_id必须不为111
1删除index,重新创建生成需要的mapping格式
DELETE website
响应结果
{
"acknowledged": true
}
2创建需要的数据
PUT /website/article/1
{
"title" : "my elasticsearch article",
"content" : "elasticsearch is very good",
"author_id" : 111
}
PUT /website/article/2
{
"title" : "my elasticsearch article",
"content" : "es is very good",
"author_id" : 112
}
PUT /website/article/3
{
"title" : "my elasticsearch article",
"content" : "elasticsearch is very bad",
"author_id" : 113
}
查询
GET website/article/_search
响应结果
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 1,
"hits": [
{
"_index": "website",
"_type": "article",
"_id": "2",
"_score": 1,
"_source": {
"title": "my elasticsearch article",
"content": "es is very good",
"author_id": 112
}
},
{
"_index": "website",
"_type": "article",
"_id": "1",
"_score": 1,
"_source": {
"title": "my elasticsearch article",
"content": "elasticsearch is very good",
"author_id": 111
}
},
{
"_index": "website",
"_type": "article",
"_id": "3",
"_score": 1,
"_source": {
"title": "my elasticsearch article",
"content": "elasticsearch is very bad",
"author_id": 113
}
}
]
}
}
组合多个搜索条件
GET /website/article/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "elasticsearch"
}
}
],
"should": [
{
"match": {
"content": "elasticsearch"
}
}
],
"must_not": [
{
"match": {
"author_id": 111
}
}
]
}
}
}
响应结果
{
"took": 84,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0.5408423,
"hits": [
{
"_index": "website",
"_type": "article",
"_id": "3",
"_score": 0.5408423,
"_source": {
"title": "my elasticsearch article",
"content": "elasticsearch is very bad",
"author_id": 113
}
},
{
"_index": "website",
"_type": "article",
"_id": "2",
"_score": 0.25316024,
"_source": {
"title": "my elasticsearch article",
"content": "es is very good",
"author_id": 112
}
}
]
}
}