5

我正在向 ElasticSearch 设置批量请求并指定要路由到的分片。

但是当我运行它时,文档会被发送到不同的分片。

这是 ElasticSEarch 批量中的错误吗?当我只索引一个文档时它就可以工作。它在我搜索时有效。但不是当我进行批量导入时。

重现:

curl -XPOST 'http://192.168.1.115:9200/_bulk?routing=a' -d '
{ "index" : { "_index" : "articles", "_type" : "article", "_id" : "1" } }
{ "title" : "value1" }
{ "delete" : { "_index" : "articles", "_type" : "article", "_id" : "2" } }
{ "create" : { "_index" : "articles", "_type" : "article", "_id" : "3" } }
{ "title" : "value3" }
{ "update" : {"_id" : "1", "_type" : "article", "_index" : "index1"} }
{ "doc" : {"field2" : "value2"} }'
4

2 回答 2

13

所以将“路由”参数添加到 URL 的末尾是行不通的。

我需要将“_routing”字段添加到实际文档字段中以指定它将转到哪个分片。

非常不直观,我希望 ElasticSearch 能够记录这一点!有时我希望我只选择 Solr :*(

希望这可以帮助其他人在未来寻找这个

curl -XPOST 'http://192.168.1.115:9200/_bulk?routing=a' -d '
{ "index" : { "_index" : "articles", "_type" : "article", "_id" : "1", "_routing" : "b"} }
{ "title" : "value1" }
{ "delete" : { "_index" : "articles", "_type" : "article", "_id" : "2", "_routing" : "b" } }
{ "create" : { "_index" : "articles", "_type" : "article", "_id" : "3", "_routing" : "b" } }
{ "title" : "value3" }
{ "update" : {"_id" : "1", "_type" : "article", "_index" : "index1", "_routing" : "b"} }
{ "doc" : {"field2" : "value2"} }'
于 2013-11-02T19:02:21.467 回答
7

@Henley Chiu 给出了正确答案,我补充一个细节:

  • 在 es 6.1 之前,您可以在批量时为每个单独的文档使用_routingor字段routing
  • 在 es 6.1(included) 之后,你只能使用routing

所以,你最好使用routing更好的未来兼容性。

于 2019-10-09T02:09:59.660 回答