过滤的查询错误

时间:2016-06-23 18:57:58

标签: elasticsearch

GET dspdocs/_search
{
 "query": {
  "filtered": {
    "filter": {
      "bool": {
        "must": ["must_term1", "must_term2"],
        "must_not": ["must_not_term", "must_not_term2"]
        }
      },
    "query": {
      "match": {
        "text": {
          "query": "query_term",
          "operator": "or"
        }
      }
    }
  }
}
}

我正在尝试执行上述查询,并收到以下错误:

"type": "query_parsing_exception",
"reason": "[_na] query malformed, must start with start_object",

我知道这意味着我的查询没有正确编写,或者我在某处搞砸了一些订单,但对于我的生活,我似乎无法弄清楚我哪里出错了

我基本上试图过滤掉所有不包含必须条款且包含must_not条款的文档。然后我在过滤集内搜索所有包含query_term的文档。

(我首先进行过滤以略微提高搜索速度)

1 个答案:

答案 0 :(得分:3)

您的问题出在示例中:

    <name>Application/Env</name>
    <value>DEV</value>
    <name>Application/ID</name>
    <value>999</value>
    <name>Application/Name</name>
    <value>appname</value>

... "bool": { "must": ["must_term1", "must_term2"], "must_not": ["must_not_term", "must_not_term2"] } }, ... must(以及must_notshould的数组)需要一个对象或一个数组物体。例如:

filter

请注意,我使用的是"bool": { "must": [ { "term" : { "my_field" : "must_term1" } }, { "term" : { "my_field" : "must_term2" } } ], "must_not": [ { "term" : { "my_field" : "must_not_term" } }, { "term" : { "my_field" : "must_not_term2" } } ] } 查询,但您可以自由使用任何类型的查询。使用Elasticsearch 2.x +,您应该将其写为纯term查询,而不是bool查询:

filtered