我无法在下面的我的elasticsearch查询中应用辅助过滤器。仅第一个过滤器匹配。我希望两个过滤器都适用于查询。
"query": {
"bool": {
"must": [
{
"bool": {
"filter": {
"range": {
"@timestamp": {
"gte": "2019-03-12",
"lte": "2019-03-13"
}
}
}
}
},
{
"bool": {
"filter": {
"bool": {
"must": {
"match": {
"msg_text": "foo AND bar"
}
}
}
}
}
}
]
}
}
答案 0 :(得分:1)
好,我提到了两种解决方案,第一种使用Match Query,第二种使用Query String。
我还假设msg_text
字段的类型为text
。
区别在于,query_string
使用解析器,该解析器将基于AND, OR
等运算符来解析您提到的文本。
match query
会阅读文本,分析文本并在此基础上构造一个bool
查询。从某种意义上说您无需提及运算符,它就行不通了
您可以在我提到的链接中阅读有关它们的更多信息。
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"
}
}
]
}
}
}
}
}
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"
}
}
]
}
}
}
}
}
从技术上讲,您的解决方案没有问题,从某种意义上讲,它可以正常工作,但我希望我的答案清楚,可以简化查询并帮助您了解要执行的操作。
让我知道是否有帮助!