@alameya

Как сделать выборку по multi part индексу в tarantool?

Собственно есть индекс
box.space.posts:create_index('category_listing', {
    type = 'tree',
    parts = { 8, 'integer', 12, 'string' } ,
    unique = false,
    if_not_exists = true
});

8 поле - это timestamp
12 - тип поста

Проблема возникает при попытке указать итератор
box.space.posts.index.category_listing:select({ 1486499758, 'videos' } , {
        iterator = box.index.GT,
        limit = limit,
        offset = offset
})


Необходимо выбрать статьи из категории 'videos' там где timestamp больше указанной даты
  • Вопрос задан
  • 745 просмотров
Пригласить эксперта
Ответы на вопрос 1
@ArtDub
Индекс сравнивает оба элемента, сравнение идет сначала по первому полю и если первое поле таплов равно, то сравнивается второе поле.

Необходимо выбрать статьи из категории 'videos' там где timestamp больше указанной даты

Можно по разному придумать решение это задачи. Мое предложение:

box.space.posts:create_index('category_listing', {
    type = 'tree',
    parts = { 12, 'string', 8, 'integer' } ,
    unique = false,
    if_not_exists = true
})

result = {} 
for _, t in box.space.posts.index.category_listing:pairs(
        { 'videos', 1486499758 },
        { iterator = box.index.GE, limit = limit, offset = offset}
    ) do
    if t[12] ~= 'videos' then
        break
    end
    if t[8] > 1486499758 then 
        table.insert(result, t)
    end
end
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы