首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >elasticsearch-查询中忽略spark连接器大小限制参数

elasticsearch-查询中忽略spark连接器大小限制参数
EN

Stack Overflow用户
提问于 2015-08-12 22:37:53
回答 3查看 1.3K关注 0票数 5

我正在尝试使用elasticsearch-spark连接器查询elasticsearch,我只想返回几个结果:

例如:

代码语言:javascript
复制
val conf = new SparkConf().set("es.nodes","localhost").set("es.index.auto.create", "true").setMaster("local")
val sparkContext = new SparkContext(conf)
val query = "{\"size\":1}"
println(sparkContext.esRDD("index_name/type", query).count())

但是,这将返回索引中的所有文档。

EN

回答 3

Stack Overflow用户

发布于 2017-02-04 22:45:51

一些参数实际上被设计成忽略了查询,比如:fromsizefields等。

它们在elasticsearch-spark连接器内部使用。

不幸的是,这个不受支持的参数列表没有文档记录。但是,如果您希望使用size参数,则可以始终依赖pushdown谓词并使用DataFrame/Dataset limit方法。

因此,您应该改用Spark SQL DSL,例如:

代码语言:javascript
复制
val df = sqlContext.read.format("org.elasticsearch.spark.sql")
                        .option("pushdown","true")
                        .load("index_name/doc_type")
                        .limit(10) // instead of size : 10

此查询将返回连接器默认使用的match_all查询返回的前10个文档。

注意:以下内容在任何级别上都不正确。

这实际上是故意的。由于连接器执行并行查询,因此它还会查看返回的文档数,因此如果用户指定了一个参数,它将根据es.scroll.limit设置覆盖该参数(请参阅配置选项)。

当您查询elasticsearch时,它还会在所有索引分片上并行运行查询,而不会覆盖它们。

票数 3
EN

Stack Overflow用户

发布于 2015-09-07 15:00:25

如果我理解正确的话,您正在执行一个count操作,该操作不会返回任何文档。因为您指定了size: 1,所以您希望它返回1吗?这是不会发生的,这是设计出来的。

编辑后添加:这是elasticsearch-hadoop中count()的定义:

代码语言:javascript
复制
override def count(): Long = {
    val repo = new RestRepository(esCfg)
    try {
      return repo.count(true)
    } finally {
      repo.close()
    }
  }

它根本不考虑查询,而是将整个ES索引视为RDD输入。

票数 0
EN

Stack Overflow用户

发布于 2016-12-29 20:25:50

这实际上是故意的。由于连接器执行并行查询,因此它还会查看返回的文档数,因此如果用户指定了一个参数,它将根据es.scroll.limit设置覆盖该参数(请参阅配置选项)。

换句话说,如果您想要控制大小,请通过该设置执行此操作,因为它将始终优先。

请注意,此参数适用于每个分片。因此,如果你有5个分片,如果这个参数设置为1,你可能会打赌fice命中。

请参阅https://www.elastic.co/guide/en/elasticsearch/hadoop/master/configuration.html

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31968344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档