2013-08-06 65 views
3

使用輔助索引時失敗我有一個了Riak數據庫運行eLevelDB後端,當我查詢與此映射減少,我得到的所有數據返回一個JSON字符串(如預期):Riak.mapValuesJson中的MapReduce

{ 
"inputs":"TWEETS_BY_ID", 
"query":[ 
    {"map": 
     {"language":"javascript", 
     "name":"Riak.mapValuesJson" 
     } 
    }] 
} 

這個查詢很慢,我真的只想查詢整個存儲桶的一小部分。我有一個時間戳的輔助指標,所以我嘗試和運行這個MapReduce的:

{ 
"inputs": 
    { 
     "bucket":"TWEETS_BY_ID", 
     "index":"timestamp_int", 
     "start":"1375736484000", 
     "end":"1375736485000" 
    }, 
"query":[ 
    {"map": 
     {"language":"javascript", 
     "name":"Riak.mapValuesJson", 
     "keep":true 
     } 
    } 
] 
} 

我得到這個錯誤:

{error,{exit,{json_encode,{bad_term,{1375736484000,<<"364491348659142656">>}}}, 
      [{mochijson2,json_encode,2, 
          [{file,"src/mochijson2.erl"},{line,149}]}, 
       {mochijson2,'-json_encode_proplist/2-fun-0-',3, 
          [{file,"src/mochijson2.erl"},{line,167}]}, 
       {lists,foldl,3,[{file,"lists.erl"},{line,1197}]}, 
       {mochijson2,json_encode_proplist,2, 
          [{file,"src/mochijson2.erl"},{line,170}]}, 
       {mochijson2,'-json_encode_proplist/2-fun-0-',3, 
          [{file,"src/mochijson2.erl"},{line,167}]}, 
       {lists,foldl,3,[{file,"lists.erl"},{line,1197}]}, 
       {mochijson2,json_encode_proplist,2, 
          [{file,"src/mochijson2.erl"},{line,170}]}, 
       {mochijson2,'-json_encode_array/2-fun-0-',3, 
          [{file,"src/mochijson2.erl"},{line,157}]}]}} 

我沒有升級到1.4.1這是今天公佈,有一個關於二級索引和Javascript映射還原的錯誤報告,但這似乎沒有改變我的錯誤。我甚至不確定如何開始調試。有什麼建議麼?

回答

2

您已找到了缺陷。當您對當前與mapreduce不兼容的索引執行範圍查詢時,會有新行爲返回匹配項。要解決該問題,請先取得source tar,如果您還沒有。 解壓文件和編輯文件riak_kv_index.hrlriak-1.4.1/deps/riak_kv/include,改線

  return_terms=true :: boolean(), %% Note, should be false for an equals query 

  return_terms=false :: boolean(), %% Note, should be false for an equals query 

只編譯索引模塊,運行

/usr/lib/riak/erts-5.9.1/bin/erlc -I riak-1.4.1/deps/riak_kv/include riak-1.4.1/deps/riak_kv/src/riak_index.erl 

這應該創建一個新的riak_index.beam檔案給你。

找到您的舊riak_index.beam,做一個備份,用新的替換它,停止然後開始riak。在所有節點上重複此操作,然後重新開始工作。