Фильтрующий аэроспайк 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 имеет дополнительный модуль name, пара параметров имени функции, позволяющая вызывать функцию 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