通过弹性搜索中的查询批量更新? - php

我知道,由于Lucene,Elastic Search当前不支持按查询批量更新,但是是否有不涉及安装ElasticSearch扩展的替代方案?

例如,是否有任何变通办法来执行:

UPDATE users SET temp = 1 WHERE temp = 0;

使用批量方法?还是其他我不知道的方法?

我是实体的Elastic Search的新手,所以我并不了解它的来龙去脉,但是我已经读了很多关于它一次更新一个对象的能力,但这对于成千上万的行来说太费时间了。

只是想找人指出我正确的方向。

参考方案

跟进datashovel答案之后,您应该使用Elasticsearch scrolling API提取所需的文档,然后使用批量更新(或不批量更新)更新文档。

假设您的索引是users,而doc_type是user,则类似于:

curl -XGET 'localhost:9200/users/user/_search?scroll=1m' -d '
{
    "constant_score": {
        "filter" : {
           "term" : {
               "temp" : 1
           }
        }
    }
}'

它将返回一个scroll_id(类似于c2Nhbjs2OzM0NDg1ODpzRlBLc0FXNlNyNm5JWUc1),然后您应该使用它来遍历结果,执行以下操作:

curl -XGET  'localhost:9200/_search/scroll?scroll=1m' \
    -d 'c2Nhbjs2OzM0NDg1ODpzRlBLc0FXNlNyNm5JWUc1'

直到没有任何点击。

迭代时,您应该创建一个用于批量更新的列表,其中包含滚动返回的所有元素。

{ "update" : {"_id" : "1", "_type" : "user", "_index" : "users"} }
{ "doc" : {"temp" : 0} }
{ "update" : {"_id" : "2", "_type" : "user", "_index" : "users"} }
{ "doc" : {"temp" : 0} }
{ "update" : {"_id" : "3", "_type" : "user", "_index" : "users"} }
{ "doc" : {"temp" : 0} }

(您可以在bulk api docs上查看有关如何执行此操作的更多详细信息)

我不知道任何PHP,但是Elasticsearch PHP API Elastica为scrolling和bulk提供了一些辅助功能。

PHP:获取调用引用的数组名称 - php

假定以下函数并调用:function doSomething( &$someArray ) { // Do something to $someArray } $names=array("John", "Paul", "George", "Ringo"); doSomet…

PHP:将数组值加在一起 - php

我相信这比标题听起来要难一些,但我可能完全错了。我有一个像这样的数组:[["londrina",15],["cascavel",34],["londrina",23],['tiradentes',34],['tiradentes',21]] 我希望能够采用通用…

PHP JQuery复选框 - php

我有以下片段。 var myData = { video: $("input[name='video[]']:checked").serialize(), sinopse: $("#sinopse").val(), dia: $("#dia").val(), quem: $(&#…

PHP-MySQL结果转换为JSON - php

我试图了解如何将MySQL结果转换为JSON格式,以便以后可以在Javascript中使用此JSON来构建HTML表。但是我的代码只是产生大量的空值,我还不明白为什么。$result = mysqli_query($con, "SELECT * FROM Customers"); $test = json_encode($result);…

PHP Count数组元素 - php

嗨,有人可以解释为什么这会返回“数组由0个元素组成”。 :$arr = array(1,3,5); $count = count($arr); if ($count = 0) { echo "An array is empty."; } else { echo "An array has $count elements.…