命名查询 Elasticsearch 在 should 数组中不起作用
Named query Elasticsearch not working inside a should array
我正在尝试使用命名查询来查看满足哪个条件,标记一或标记二,但它不起作用,实现此目的的正确方法是什么?
该示例指出“_name”标签应该在 bool 中使用,也就是它,所以我不确定问题出在哪里。
GET /myindex/_search
{
"_source": ["ids"],
"query": {
"bool": {
"must": [
{
"range": {
"timestamp": {
"format": "strict_date_optional_time",
"gte": "2022-02-21T20:44:07.099Z",
"lte": "2022-03-23T20:44:07.099Z"
}
}
},
{
"bool": {
"should": [
{
"_name": "tag-one",
"query_string": {
"query":"*hello*",
"fields":["field1","field2","field3"]
}
},
{
"query_string": {
"query":"*world*",
"fields":["field1","field2","field3"]
},
"_name": "tag-two"
}
]
}
}
]
}
},
"size": 10000
}
我得到的错误:
{
"error" : {
"root_cause" : [
{
"type" : "parsing_exception",
"reason" : "[_name] query malformed, no start_object after query name",
"line" : 19,
"col" : 18
}
],
"type" : "x_content_parse_exception",
"reason" : "[19:18] [bool] failed to parse field [must]",
"caused_by" : {
"type" : "x_content_parse_exception",
"reason" : "[19:18] [bool] failed to parse field [should]",
"caused_by" : {
"type" : "parsing_exception",
"reason" : "[_name] query malformed, no start_object after query name",
"line" : 19,
"col" : 18
}
}
},
"status" : 400
}
Each query accepts a _name in its top-level definition. You can use
named queries to track which queries matched returned documents.
您需要在 query_string
中包含 _named
查询。将您的搜索查询修改为
{
"_source": [
"ids"
],
"query": {
"bool": {
"must": [
{
"range": {
"timestamp": {
"format": "strict_date_optional_time",
"gte": "2022-02-21T20:44:07.099Z",
"lte": "2022-03-23T20:44:07.099Z"
}
}
},
{
"bool": {
"should": [
{
"query_string": {
"query": "*hello*",
"fields": [
"field1",
"field2",
"field3"
],
"_name": "tag-one" //note this
}
},
{
"query_string": {
"query": "*world*",
"fields": [
"field1",
"field2",
"field3"
],
"_name": "tag-two"
}
}
]
}
}
]
}
},
"size": 10000
}
我正在尝试使用命名查询来查看满足哪个条件,标记一或标记二,但它不起作用,实现此目的的正确方法是什么? 该示例指出“_name”标签应该在 bool 中使用,也就是它,所以我不确定问题出在哪里。
GET /myindex/_search
{
"_source": ["ids"],
"query": {
"bool": {
"must": [
{
"range": {
"timestamp": {
"format": "strict_date_optional_time",
"gte": "2022-02-21T20:44:07.099Z",
"lte": "2022-03-23T20:44:07.099Z"
}
}
},
{
"bool": {
"should": [
{
"_name": "tag-one",
"query_string": {
"query":"*hello*",
"fields":["field1","field2","field3"]
}
},
{
"query_string": {
"query":"*world*",
"fields":["field1","field2","field3"]
},
"_name": "tag-two"
}
]
}
}
]
}
},
"size": 10000
}
我得到的错误:
{
"error" : {
"root_cause" : [
{
"type" : "parsing_exception",
"reason" : "[_name] query malformed, no start_object after query name",
"line" : 19,
"col" : 18
}
],
"type" : "x_content_parse_exception",
"reason" : "[19:18] [bool] failed to parse field [must]",
"caused_by" : {
"type" : "x_content_parse_exception",
"reason" : "[19:18] [bool] failed to parse field [should]",
"caused_by" : {
"type" : "parsing_exception",
"reason" : "[_name] query malformed, no start_object after query name",
"line" : 19,
"col" : 18
}
}
},
"status" : 400
}
Each query accepts a _name in its top-level definition. You can use named queries to track which queries matched returned documents.
您需要在 query_string
中包含 _named
查询。将您的搜索查询修改为
{
"_source": [
"ids"
],
"query": {
"bool": {
"must": [
{
"range": {
"timestamp": {
"format": "strict_date_optional_time",
"gte": "2022-02-21T20:44:07.099Z",
"lte": "2022-03-23T20:44:07.099Z"
}
}
},
{
"bool": {
"should": [
{
"query_string": {
"query": "*hello*",
"fields": [
"field1",
"field2",
"field3"
],
"_name": "tag-one" //note this
}
},
{
"query_string": {
"query": "*world*",
"fields": [
"field1",
"field2",
"field3"
],
"_name": "tag-two"
}
}
]
}
}
]
}
},
"size": 10000
}