我目前正在基于这样的单行弹性查询(示例)elasticsearch在Spark Job过滤中获取RDD :
elasticsearch
Spark Job
val elasticRdds = sparkContext.esJsonRDD(esIndex, s"?default_operator=AND&q=director.name:DAVID + \n movie.name:SEVEN")
现在,如果我们的搜索查询变得复杂,例如:
{ "query": { "filtered": { "query": { "query_string": { "default_operator": "AND", "query": "director.name:DAVID + \n movie.name:SEVEN" } }, "filter": { "nested": { "path": "movieStatus.boxoffice.status", "query": { "bool": { "must": [ { "match": { "movieStatus.boxoffice.status.rating": "A" } }, { "match": { "movieStatus.boxoffice.status.oscar": "false" } } ] } } } } } } }
我是否仍可以将该查询转换为 嵌入式 弹性查询以与 esJsonRDD 一起使用?或者是有反正上面的查询仍可使用 的是 与 esJsonRDD ?如果没有,在Spark中获取此类RDD的更好方法是什么?
因为esJsonRDD似乎只接受内联(一行)弹性查询。
使用三引号:
val query = """{ "query": { "filtered": { "query": { "query_string": { "default_operator": "AND", "query": "director.name:DAVID + \n movie.name:SEVEN" } }, "filter": { "nested": { "path": "movieStatus.boxoffice.status", "query": { "bool": { "must": [ { "match": { "movieStatus.boxoffice.status.rating": "A" } }, { "match": { "movieStatus.boxoffice.status.oscar": "false" } } ] } } } } } } }""" val elasticRdds = sparkContext.esJsonRDD(esIndex, query)