当前位置: 首页 > 面试题库 >

在Spark中使用复杂过滤从Elasticsearch获取esJsonRDD

姜业
2023-03-14
问题内容

我目前正在基于这样的单行弹性查询(示例)elasticsearchSpark Job过滤中获取RDD :

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)


 类似资料:
  • 问题内容: 假设我有: 每个产品都有属性。每个属性都有ID和一个值。我可以按属性筛选产品,但现在我要从MongoDB创建“可能的属性”列表。我想找到一种单独从ElasticSearch生成这样的列表的方法(也许只是向MongoDB查询其他数据)。 我需要的是: 这样的聚合看起来如何?获取所有可用属性(按分组)及其所有可能值(在所有产品中)? 问题答案: 您无法在一个查询中做到这一点,但在两个查询中

  • 问题内容: 我有一个包含嵌套对象的文档,如下所示: 现在,我需要按书名(不是book_title)和年份(比如2014)来过滤书籍。我需要的输出将是: 当我使用嵌套过滤器时,即使它们不匹配,我也会得到所有嵌套对象。如何仅获取匹配的嵌套对象? 问题答案: 您需要使用以下嵌套功能。 在输出中,您将确切地获得期望的结果,即字段和嵌套数组中的匹配书。

  • 问题内容: 我有一个类似下面的查询, 但是由于我的ID过滤器,我的构面未过滤。我得到了所有方面,但我希望通过上面的ID过滤器对其进行过滤。你有什么想法 ? 问题答案: 尽管您的工作可行,但更干净的解决方案是使用过滤查询。 http://www.elasticsearch.org/guide/reference/query-dsl/filtered- query/ 允许您使用原始查询+一些任意过滤器

  • 问题内容: 我正在尝试搜索日期范围内的日期范围内的所有项目,但失败(不返回任何结果) 查询: 映射: 结果是: 通过一个带数字值的整数字段(“ cards”)的范围过滤的同一查询工作正常。将日期更改为非常早的开始(1900-01-01 00:00:00)也不会显示任何结果。 我究竟做错了什么? 顺便说一句,我知道我在映射中启用了_timestamp,但这不是我要过滤的字段。 问题答案: 似乎对我来

  • 问题内容: 我正在为ElasticSearch配置JDBC河,但找不到任何好的配置示例。我已经阅读了Elasticsearch-river- jdbc GitHub上的所有页面。 我有一个SQL查询,我需要每X秒从所有表列中获取更改。我如何告诉JDBC river某些行已更改并应重新索引? 在ES服务器启动期间获取数据,正在进行轮询,但是没有从DB到ES获取更改。 我的配置: 谢谢。 问题答案:

  • 不知道如何表达这个问题。我正在使用Elasticsearch 2.2。 让我们从数据集的一个示例开始,该数据集由5个文档组成: 被调用的\u实体始终具有uuid。coverage\u实体可以为空,也可以具有uuid。 我使用脚本在任何一个被调用的\实体上进行聚合。uuid或coverage\u实体。uuid: 现在,聚合已经从任一头生成了术语。调用了\u实体。uuid或标头。coverage\u实