riak 2.0是否允许对象更新在solr更新时是原子的?

时间:2014-12-25 04:31:54

标签: solr riak

当我更新被solr索引的对象时,我在riak和solr之间输入一个不一致的状态。 是否可以创建一个post commit hook来告诉我何时完成solr更新,以便我可以保证集群是一致的?或者我是否需要考虑更多是否有一种聪明的方法来处理最终的一致性?

以下是描述问题的可重现步骤:

curl localhost:8098/buckets/bucket/keys/3eaVbY3BWgIN3BFv4riEc6cAqPk -d'{ "key":"3eaVbY3BWgIN3BFv4riEc6cAqPk" }' -H 'Content-Type: application/json'
curl -i -XDELETE localhost:8098/buckets/bucket/keys/3eaVbY3BWgIN3BFv4riEc6cAqPk && curl 'localhost:8098/search/query/index_name?q=key:3eaVbY3BWgIN3BFv4riEc6cAqPk&wt=json'

HTTP/1.1 204 No Content
Vary: Accept-Encoding
Server: MochiWeb/1.1 WebMachine/1.10.5 (jokes are better explained)
Date: Mon, 29 Dec 2014 21:31:58 GMT
Content-Type: application/json
Content-Length: 0

{"responseHeader":{"status":0,"QTime":6,"params":{"q":"key:3eaVbY3BWgIN3BFv4riEc6cAqPk","shards":"127.0.0.1:8093/internal_solr/index_name","127.0.0.1:8093":"(_yz_pn:62 AND (_yz_fpn:62)) OR _yz_pn:61 OR _yz_pn:58 OR _yz_pn:55 OR _yz_pn:52 OR _yz_pn:49 OR _yz_pn:46 OR _yz_pn:43 OR _yz_pn:40 OR _yz_pn:37 OR _yz_pn:34 OR _yz_pn:31 OR _yz_pn:28 OR _yz_pn:25 OR _yz_pn:22 OR _yz_pn:19 OR _yz_pn:16 OR _yz_pn:13 OR _yz_pn:10 OR _yz_pn:7 OR _yz_pn:4 OR _yz_pn:1","wt":"json"}},
    "response":{
       "numFound":1,"start":0,"maxScore":2.9095426,"docs":[              
           {
              "key":"3eaVbY3BWgIN3BFv4riEc6cAqPk",
              "_yz_id":"1*default*index_name*3eaVbY3BWgIN3BFv4riEc6cAqPk*4",
              "_yz_rk":"3eaVbY3BWgIN3BFv4riEc6cAqPk",
              "_yz_rt":"default",
              "_yz_rb":"index_name"
           }
        ]
      }
  }

1 个答案:

答案 0 :(得分:3)

在Riak 2.0+中使用Yokozuna搜索,搜索索引由riak_kv_vnode模块here更新。这意味着索引函数不是像传统搜索那样通过预先挂起调用来调用,而是在put进程将对象存储到后端之后,即在将回复发送到客户端之后异步调用。 / p>

实际执行索引的代码是here。我没有看到任何允许通知事件或挂钩而不需要从源代码编译模块的地方。

我希望索引过程会很快完成,但是它可能会留下一个窗口,可能是在kv中更新的对象和搜索索引中出现的相应更新之间的几秒钟。