Elasticsearch过滤聚合 - 在start_object之后查询格式错误,没有字段

时间:2016-04-18 05:47:20

标签: elasticsearch

我正在尝试使用过滤器聚合来获取索引中某些项的计数。但它失败了错误 - query malformed, no field after start_object

{
  "aggs": {
    "actions": {
      "filters": {
        "filters": {
          "profile_creates": {
            "query": {
              "querystring": "request_method:POST AND path:profile"
            }
          },
          "profile_edits": {
            "query": {
              "querystring": "request_method:PUT AND path:profile"
            }
          }
        }
      }
    }
  }
}

我看不出这个查询有什么问题。有人可以帮忙吗?

我正在使用Elasticsearch 1.7.1

这是例外

[2016-04-18 05:27:09,410][DEBUG][action.search.type       ] [Chance] All shards failed for phase: [query]
org.elasticsearch.transport.RemoteTransportException: [Spitfire][inet[/:9300]][indices:data/read/search[phase/query]]
Caused by: org.elasticsearch.search.SearchParseException: [server-logs][7]: from[-1],size[-1]: Parse Failure [Failed to parse source [{
  "aggs": {
    "actions": {
      "filters": {
        "filters": {
          "profilecreate": {
            "query": {
              "querystring": "request_method:POST"
            }
          },
          "profileedit": {
            "query": {
              "querystring": "request_method:PUT"
            }
          }
        }
      }
    }
  }
}]]
      at org.elasticsearch.search.SearchService.parseSource(SearchService.java:747)
      at org.elasticsearch.search.SearchService.createContext(SearchService.java:572)
      at org.elasticsearch.search.SearchService.createAndPutContext(SearchService.java:544)
      at org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:306)
      at org.elasticsearch.search.action.SearchServiceTransportAction$SearchQueryTransportHandler.messageReceived(SearchServiceTransportAction.java:776)
      at org.elasticsearch.search.action.SearchServiceTransportAction$SearchQueryTransportHandler.messageReceived(SearchServiceTransportAction.java:767)
      at org.elasticsearch.transport.netty.MessageChannelHandler$RequestHandler.doRun(MessageChannelHandler.java:279)
      at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:36)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
      at java.lang.Thread.run(Thread.java:745)
Caused by: org.elasticsearch.index.query.QueryParsingException: [server-logs] [_na] query malformed, no field after start_object
      at org.elasticsearch.index.query.QueryParseContext.parseInnerQuery(QueryParseContext.java:298)
      at org.elasticsearch.index.query.QueryFilterParser.parse(QueryFilterParser.java:47)
      at org.elasticsearch.index.query.QueryParseContext.executeFilterParser(QueryParseContext.java:371)
      at org.elasticsearch.index.query.QueryParseContext.parseInnerFilter(QueryParseContext.java:352)
      at org.elasticsearch.index.query.IndexQueryParserService.parseInnerFilter(IndexQueryParserService.java:295)
      at org.elasticsearch.search.aggregations.bucket.filters.FiltersParser.parse(FiltersParser.java:63)
      at org.elasticsearch.search.aggregations.AggregatorParsers.parseAggregators(AggregatorParsers.java:148)
      at org.elasticsearch.search.aggregations.AggregatorParsers.parseAggregators(AggregatorParsers.java:78)
      at org.elasticsearch.search.aggregations.AggregationParseElement.parse(AggregationParseElement.java:60)
      at org.elasticsearch.search.SearchService.parseSource(SearchService.java:731)
      ... 10 more

1 个答案:

答案 0 :(得分:6)

您错过了query_string中的下划线和query查询中的另一个关键字query_string。你需要这样写:

{
  "aggs": {
    "actions": {
      "filters": {
        "filters": {
          "profile_creates": {
            "query": {
              "query_string": {"query": "request_method:POST AND path:profile"}
            }
          },
          "profile_edits": {
            "query": {
              "query_string": {"query": "request_method:PUT AND path:profile"}
            }
          }
        }
      }
    }
  }
}