44、初识搜索引擎_Query DSL搜索语法
2020-01-08 本文已影响0人
拉提娜的爸爸
1、什么是Query DSL
搜索内容在{···}中的就是Query DSL搜索,如:
GET /_search
{
"query": {
"match_all": {}
}
}
2、Query DSL的基本语法
(1)语法
{
QUERY_NAME: {
ARGUMENT: VALUE,
ARGUMENT: VALUE,...
}
}
{
QUERY_NAME: {
FIELD_NAME: {
ARGUMENT: VALUE,
ARGUMENT: VALUE,...
}
}
}
(2)示例
GET /test_index/test_type/_search
{
"query": {
"match": {
"test_field": "test"
}
}
}
----------------------------结果----------------------------
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 0.25316024,
"hits": [
{
"_index": "test_index",
"_type": "test_type",
"_id": "7",
"_score": 0.25316024,
"_source": {
"test_field": "test client 2"
}
},
{
"_index": "test_index",
"_type": "test_type",
"_id": "8",
"_score": 0.25316024,
"_source": {
"test_field": "test client 2"
}
},
{
"_index": "test_index",
"_type": "test_type",
"_id": "1",
"_score": 0.25316024,
"_source": {
"test_field": "test service 1"
}
}
]
}
}
3、如何组合多个搜索条件
举例说明
(1)创建测试document数据
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 1,
"hits": [
{
"_index": "website",
"_type": "article",
"_id": "2",
"_score": 1,
"_source": {
"title": "my hadoop article",
"content": "hadoop is very bad",
"author_id": 111
}
},
{
"_index": "website",
"_type": "article",
"_id": "1",
"_score": 1,
"_source": {
"title": "my elasticsearch article",
"content": "es is very bad",
"author_id": 110
}
},
{
"_index": "website",
"_type": "article",
"_id": "3",
"_score": 1,
"_source": {
"title": "my elasticsearch article",
"content": "es is very bad",
"author_id": 111
}
}
]
}
}
(2)搜索需求:title必须包含elasticsearch,content可以包含elasticsearch也可以不包含,author_id必须不为111
GET /website/article/_search
{
"query": {
"bool": {
"must": [
{"match": {
"title": "elasticsearch"
}}
],
"should": [
{"match": {
"content": "elasticsearch"
}}
],
"must_not": [
{"match": {
"author_id": "111"
}}
]
}
}
}
--------------------------------结果--------------------------------
{
"took": 11,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.25316024,
"hits": [
{
"_index": "website",
"_type": "article",
"_id": "1",
"_score": 0.25316024,
"_source": {
"title": "my elasticsearch article",
"content": "es is very bad",
"author_id": 110
}
}
]
}
}
bool.must:必须包含的参数值
bool.should:可以包含,也可以不包含的参数值
bool.must_not:必须不包含的参数值
(3)Query DSL也可以嵌套
如:
GET /test_index/_search
{
"query": {
"bool": {
"must": {"match":{ "name": "tom" }},
"should": [
{ "match": { "hired": true }},
{ "bool": {
"must": { "match": { "personality": "good" }},
"must_not": { "match": { "rude": true }}
}
}],
"minimum_should_match": 1
}
}
}