Как сделать выборку через вторичные индексы в Tarantool?

Я создаю пространство с двумя индексами - первичным и вторичным:

box.schema.sequence.create('user_seq', { if_not_exists = true })
box.schema.space.create('user', {
    if_not_exists = true,
    format = {
        { name = 'id', type = 'unsigned'},
        { name = 'bio', type = 'string'}
    }
})
box.space.user:create_index('id', {
     sequence = 'user_seq',
     parts = {'id'}
})
box.space.user:create_index('bio', {
     parts = {'bio'},
     if_not_exists = true,
     unique = false
})

Вставьте кортеж:

tarantool> box.space.user:insert({ box.sequence.user_seq:next(), 'other stuff'})
---
- [1, 'other stuff']
...

Я пробовал искать вот так:

box.space.user:select({'other stuff'})

И получил ошибку:

- error: 'Supplied key type of part 0 does not match index part type: expected unsigned'

Как мне искать по вторичным индексам?


person Artur Barsegyan    schedule 23.09.2020    source источник


Ответы (1)


В документации сказано:

index.index-name не является обязательным. Если он опущен, то предполагаемый индекс является первым индексом (первичным ключом). Следовательно, для приведенного выше примера box.space.tester: select ({1}, {iterator = 'GT'}) вернул бы те же две строки через «первичный» индекс.

Используйте этот вторичный индекс явно:

tarantool> box.space.user.index.bio:select({'other stuff'})
---
- - [1, 'other stuff']
...

Подробнее об этом в документации. / а>

person Artur Barsegyan    schedule 23.09.2020