Ну, я упомянул два решения: первое использует Match Query , а второе использует Query String .
Также я предполагаю, что поле msg_text
имеет тип text
.
Разница в том, что query_string
использует синтаксический анализатор, который будет анализировать упомянутый вами текст на основе таких операторов, как AND, OR
.
Хотя match query
будет читать текст, анализировать текст и на его основе создаст запрос bool
. В смысле вам не нужно упоминать операторов, и он не будет работать
Подробнее о них можно прочитать в ссылках, которые я упомянул.
1. Использование Match Query
POST <your_index_name>/_search
{
"query":{
"bool":{
"filter":{
"bool":{
"must":[
{
"range":{
"@timestamp":{
"gte":"2019-03-12",
"lte":"2019-03-13"
}
}
},
{
"match":{
"msg_text":"foo bar"
}
}
]
}
}
}
}
}
2. Использование строки запроса
POST <your_index_name>/_search
{
"query":{
"bool":{
"filter":{
"bool":{
"must":[
{
"range":{
"@timestamp":{
"gte":"2019-03-12",
"lte":"2019-03-13"
}
}
},
{
"query_string":{
"fields": ["msg_text"], <----- You can add more fields here using comma as delimiter
"query":"foo AND bar"
}
}
]
}
}
}
}
}
Технически, с вашим решением все в порядке, в том смысле, что оно будет работать, но я надеюсь, что мои ответы ясны, упрощают запрос и помогают вам понять, что вы пытаетесь сделать.
Дайте мне знать, если это поможет!