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

时间:2016-12-13 09:34:40

标签: elasticsearch

我想在Elasticsearch中表达这个SQL:

select * from ticket where user_id = 1 and (class_a = 1000010 or class_b = 16);

我使用如下组合过滤器:



curl 'localhost:9200/ticket/_search?pretty' -d'
{
    "query": {
        "bool": {
            "should": [
                {"term": {"class_a": 1000010}},
                {"term": {"class_b": 16}}
            ]
        },
        "filter": {
            "term": {
                "user_id": 1
            }
        }
    }
}'




但得到如下错误:



{
  "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_fetch",
    "grouped" : true,
    "failed_shards" : [ {
      "shard" : 0,
      "index" : "ticket",
      "node" : "FO3-zhb1R1WCak381t88gQ",
      "reason" : {
        "type" : "parse_exception",
        "reason" : "failed to parse search source. expected field name but got [START_OBJECT]"
      }
    } ]
  },
  "status" : 400
}




任何人都可以帮助我吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

您几乎就在那里,您需要像这样重写您的查询(即在filter子句中移动您的bool):

curl 'localhost:9200/ticket/_search?pretty' -d'{
  "query": {
    "bool": {
      "minimum_should_match": 1,
      "should": [
        {
          "term": {
            "class_a": 1000010
          }
        },
        {
          "term": {
            "class_b": 16
          }
        }
      ],
      "filter": {
        "term": {
          "user_id": 1
        }
      }
    }
  }
}'