在一个ElasticSearch查询中有多个带有另一个bool的match_phrase条件?

envsm3lx  于 2023-01-20  发布在  ElasticSearch
关注(0)|答案(1)|浏览(144)

我正在尝试执行Elasticsearch查询,该查询搜索文本字段(“body”)并返回与我提供的两个多词短语中至少一个相匹配的项目(即:“堆栈溢出”或“堆栈溢出”)。我还希望查询只提供在给定时间戳之后发生的结果,结果按时间排序。
我目前的解决方案如下。我相信MUST工作正常(gte一个时间戳),但BOOL + SHOULD与两个match_phrase是不正确的。我得到以下错误:

Unexpected character ('{' (code 123)): was expecting double-quote to start field name

我认为这是因为我有两个匹配短语在那里?
This是ESMap,我正在使用的ES API的详细信息是here

{"query":
  {"bool":
    {"should":
      [{"match_phrase":
         {"body":"a+phrase"}
       },
       {"match_phrase":
         {"body":"another+phrase"}
       }
      ]
    },
  {"bool":
    {"must":
      [{"range":
        {"created_at:
          {"gte":"thispage"}
        }
       }
      ]}
     }
    },"size":10000,
      "sort":"created_at"
}
jk9hmnmh

jk9hmnmh1#

我想你只是在created_at之后少了一个"

{
    "query": {
        "bool": {
            "must": [
                {
                    "range": {
                        "created_at": {
                            "gte": "1534004694"
                        }
                    }
                },
                {
                    "bool": {
                        "should": [
                            {
                                "match_phrase": {
                                    "body": "a+phrase"
                                }
                            },
                            {
                                "match_phrase": {
                                    "body": "another+phrase"
                                }
                            }
                        ]
                    }
                }
            ]
        }
    },
    "size": 10,
    "sort": "created_at"
}

此外,您还可以同时拥有mustshould作为bool对象的属性,因此这也值得一试。

{
    "query": {
        "bool": {
            "must": {
                "range": {
                    "created_at": {
                        "gte": "1534004694"
                    }
                }
            },
            "should": [
                {
                    "match_phrase": {
                        "body": "a+phrase"
                    }
                },
                {
                    "match_phrase": {
                        "body": "another+phrase"
                    }
                }
            ]
        }
    },
    "size": 10,
    "sort": "created_at"
}

顺便说一句,Postman或任何JSON格式化程序/验证程序都将有助于确定错误所在。

相关问题