riak: опрос корзины для всех элементов в корзине по вторичному индексу

#curl #riak #secondary-indexes

#curl #riak #вторичные индексы

Вопрос:

Пытаюсь сделать это с помощью документации на их сайте, но, похоже, она устарела.

У вас есть корзина с вторичным индексом, и вы хотите curl , чтобы она получала JSON, связанный со всеми объектами, которые имеют определенное значение для вторичного индекса.

Похоже, что старый способ сделать это был

 curl http://localhost:8098/buckets/{bucket}/index/{index}/{value}
  

но теперь это устарело.

Пытался сделать

 curl http://localhost:8098/riak/{bucket}?keys=trueamp;{index}={value}
  

но это не работает. Есть идеи, какой здесь правильный синтаксис?

Ответ №1:

У вас есть устаревание назад, /riak/{bucket} метод устарел, /buckets/{bucket} это текущая схема URL.

Обратите внимание, что ваш запрос curl http://localhost:8098/buckets/{bucket}/index/{index}/{value} вернет список ключей, но не их значения.

Пара примеров:

сначала сгенерируйте некоторые данные:

 # for i in {1..1000}; do 
   num=$RANDOM; 
   curl 172.31.0.3:8098/buckets/index_test/keys/key$i -XPUT 
        -H 'content-type: text/plain' 
        -H 'x-riak-index-random_int:'$num 
        -d "{"value":$num}"; 
  done
  

найдите ключи, случайное число которых равно 10000-10500:

 # curl 172.31.0.3:8098/buckets/index_test/index/random_int/10000/10500

{"keys":["key334","key93","key51","key232","key427","key177","key504","key813","key472","key618","key405","key558"]}
  

Получить значение, которое было проиндексировано для каждого элемента:

 # curl 172.31.0.3:8098/buckets/index_test/index/random_int/10000/10500?return_terms=true

{"results":[{"10189":"key334"},{"10089":"key93"},{"10013":"key558"},{"10088":"key405"},{"10057":"key51"},{"10353":"key618"},{"10282":"key472"},{"10194":"key504"},{"10301":"key232"},{"10219":"key813"},{"10311":"key427"},{"10278":"key177"}]}
  

Но чтобы вернуть фактический JSON, нам нужно получить значение из хранилища KV:

 # curl 172.31.0.3:8098/buckets/index_test/keys/key334

{"value":10189}
  

Это можно сделать с помощью MapReduce, если запрос выполняется не слишком часто и узлы могут обрабатывать нагрузку:

 # curl 172.31.0.3:8098/mapred -XPOST -H 'content-type: application/json' 
  -d '{"inputs":{"bucket":"index_test","index":"random_int","start":10000,"end":10500},'
'"query":[{"map":{"language":"javascript",'
'"source":"function(Obj){return [Obj.values[0].data]}"}}]}'

["{value:10189}","{value:10013}","{value:10311}","{value:10278}","{value:10057}","{value:10219}","{value:10353}","{value:10089}","{value:10088}","{value:10301}","{value:10282}","{value:10194}"]

# curl 172.31.0.3:8098/mapred -XPOST -H 'content-type: application/json'
       -d '{"inputs":{"bucket":"index_test","index":"random_int","start":10000,"end":10500},'
'"query":[{"map":{"language":"javascript",'
'"source":"function(Obj){return [{"key":Obj.key,"data":Obj.values[0].data}]}"}}]}'

[{"key":"key558","data":"{value:10013}"},{"key":"key334","data":"{value:10189}"},{"key":"key51","data":"{value:10057}"},{"key":"key427","data":"{value:10311}"},{"key":"key177","data":"{value:10278}"},{"key":"key813","data":"{value:10219}"},{"key":"key93","data":"{value:10089}"},{"key":"key405","data":"{value:10088}"},{"key":"key232","data":"{value:10301}"},{"key":"key618","data":"{value:10353}"},{"key":"key504","data":"{value:10194}"},{"key":"key472","data":"{value:10282}"}]