groovy - Elasticsearch-groovy批量请求

标签 groovy elasticsearch

根据elasticsearch-groovy documentation,有一个BulkRequest的示例。我不想像文档中的示例那样添加请求并在一个大语句中执行,而是要逐步构建BulkRequestActionRequests数组(IndexRequest,DeleteRequest等),然后在一个数组中执行整个数组。块。

我尝试了以下方法:

@Grab(group='org.elasticsearch', module='elasticsearch-groovy', version='1.7.0')

import org.elasticsearch.client.Client
import org.elasticsearch.node.Node
import static org.elasticsearch.node.NodeBuilder.nodeBuilder

import org.elasticsearch.action.ActionRequest
import org.elasticsearch.action.bulk.*
import org.elasticsearch.action.index.IndexRequest

Node node = nodeBuilder().settings {
                cluster {
                    name = "lemato_cluster"
                  }
                  node {
                    client = true
                  }
            }.node()

// Get a usable Node Client                
Client client = node.client

BulkRequest indexBulk = []

indexBulk.add new IndexRequest().with {
    index "my_index"
    type "my_type"
    id "1"
    source {
      user = "kimchy"
      postDate = "2013-01-30"
      message = "trying out Elasticsearch"
      nested {
        details {
          here = 123
          timestamp = new Date()
        }
      }
    }
}

indexBulk.add new IndexRequest().with {
    index "my_index"
    type "my_type"
    id "2"
    source {
      user = "kimchy2"
      postDate = "2013-02-30"
      message = "trying out Elasticsearch for my 2nd set"
      nested {
        details {
          here = 123
          timestamp = new Date()
        }
      }
    }
}

BulkResponse br = client.bulk(indexBulk).actionGet()
println br.getItems()

node.close()

这可以正常工作,但是不幸的是,只有第一个IndexRequest被执行,第二个IndexRequest被丢弃。

最佳答案

正确的做法是这样的:

@Grab(group='org.elasticsearch', module='elasticsearch-groovy', version='1.7.0')

import org.elasticsearch.client.Client
import org.elasticsearch.node.Node
import static org.elasticsearch.node.NodeBuilder.nodeBuilder

import org.elasticsearch.action.ActionRequest
import org.elasticsearch.action.bulk.*
import org.elasticsearch.action.index.IndexRequest

Node node = nodeBuilder().settings {
                cluster {
                    name = "lemato_cluster"
                  }
                  node {
                    client = true
                  }
            }.node()

// Get a usable Node Client                
Client client = node.client

BulkResponse response = client.bulk {
  add new IndexRequest().with {            <--- call "add" and then specify the list of request to add
    index "my_index"
    type "my_type"
    id "1"
    source {
      user = "kimchy"
      postDate = "2013-01-30"
      message = "trying out Elasticsearch"
      nested {
        details {
          here = 123
          timestamp = new Date()
        }
      }
    }
  },
  new IndexRequest().with {                <--- adding the second request
    index "my_index"
    type "my_type"
    id "2"
    source {
      user = "kimchy2"
      postDate = "2013-02-30"
      message = "trying out Elasticsearch for my 2nd set"
      nested {
        details {
          here = 123
          timestamp = new Date()
        }
      }
    }
  },

  ...  <--- add your other IndexRequest, UpdateRequest or DeleteRequest separated by commas.

}.actionGet()

println response.getItems()

node.close()

关于groovy - Elasticsearch-groovy批量请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32155037/

相关文章:

java - 如何使用渐变。 Java 和 Groovy 在一起?

java - RestHighlevelClient切片滚动不起作用

elasticsearch - ElasticSearch卡住并崩溃

Elasticsearch - 维护文档历史记录

elasticsearch - 如果转换返回NULL,kafka接收器连接器是否插入记录?

java - 如何在build.gradle文件中定义方法,该方法可以从目录编译Java文件并复制一些文件

Jenkinsfile 很好地打印参数

java - 在 groovy 中使用 JAXB 解码对 java POJO 的 SOAP 响应

Groovy:如何获取 ?private? 的值闭包变量

elasticsearch - Stormcrawler -> Elasticsearch 的最佳设置,如果爬行的礼貌不是问题?