Филтриране на aerospike LLIST

Може ли някой, моля, да ми покаже как да филтрирам контейнер на Aerospike LLIST не по ключа и да върна целия резултат с помощта на PHP.

В моя случай кошчето „бележки“ съдържа много редове с ключ, заглавие, описание и категория. Мога да извлека всички редове, като използвам следния код, но трябва да направя филтър за категорията и да получа резултатите само за тези в същата категория. Ако е необходим udf, моля, помогнете ми да ми покажете и udf кода и как да приложа филтъра, за да получа резултатите.

$db = new Aerospike($config, false);<br/>
$key = $db->initKey('mynamespace', 'myset', $userid);<br/>
$list = new \Aerospike\LDT\LList($db, $key, 'notes');<br/>
$status = $list->scan($results);

person user1997296    schedule 12.07.2016    source източник


Отговори (2)


Методът LList.scan има незадължителен модул име, име на функция двойка параметри, което ви позволява да извикате Lua функция за филтриране на всеки елемент.

Има примерен PHP скрипт предоставено с клиентското репо, което извиква примерен Lua модул:

function keyfilters.even_filter(element)
    local remainder = -1
    if type(element) == "number" then
        remainder = element % 2
    elseif (getmetatable(element) == getmetatable(map())) and element['key'] then
        remainder = element['key'] % 2
    end
    if remainder == 0 then
        return element
    else
        return nil
    end
end

Извиква се от

$rental_history->scan($elements, 'keyfilters', 'even_filter');
person Ronen Botzer    schedule 12.07.2016

Управете да промените UDF, както следва, и той работи.

  local category_filters = {} 
  function category_filters.filterBy(element,val)            
  if element['category'] == val[1] then
    return element   
  else
    return nil   
  end 
end 
return category_filters

Извикан от

$status = $list->scan($results, 'category_filters', 'filterBy', array($category));
person user1997296    schedule 14.07.2016