ElasticSearch - 无法解析搜索源。期望的字段名称,但得到[START_OBJECT]

时间:2016-04-07 13:51:02

标签: elasticsearch

我无法弄清楚我的ES查询中有什么问题。 我想过滤特定字段,并按其他字段排序。

请求:

GET /_search
{
    "query" : {
        "term": {
          "_type" : "monitor"
        },
        "filtered" : {
            "filter" : { "term" : { "ProcessName" : "myProc" }}
        }
    },
    "sort": { "TraceDateTime": { "order": "desc", "ignore_unmapped": "true" }}
}

响应:

{
   "error": {
      "root_cause": [
         {
            "type": "parse_exception",
            "reason": "failed to parse search source. expected field name but got [START_OBJECT]"
         }
      ],
      "type": "search_phase_execution_exception",
      "reason": "all shards failed",
      "phase": "query",
      "grouped": true,
      "failed_shards": [
         {
            "shard": 0,
            "index": ".kibana",
            "node": "94RPDCjhQh6eoTe6XoRmSg",
            "reason": {
               "type": "parse_exception",
               "reason": "failed to parse search source. expected field name but got [START_OBJECT]"
            }
         }
      ]
   },
   "status": 400
}

1 个答案:

答案 0 :(得分:1)

您的查询中存在语法错误,您需要在term复合查询中包含两个bool/must个查询,它必须如下所示:

POST /_search
{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "ProcessName": "myProc"
              }
            },
            {
              "term": {
                "_type": "monitor"
              }
            }
          ]
        }
      }
    }
  },
  "sort": {
    "TraceDateTime": {
      "order": "desc",
      "ignore_unmapped": "true"
    }
  }
}

PS:在查询中发送有效负载时始终使用POST。