SQL-запрос LIKE в Tarantool

Как правильно сделать запрос в БД Tarantool с ключевым словом LIKE в SQL? Например:

SELECT * FROM space where smth LIKE '%some_value%';

Могу ли я искать значения, используя часть индекса, или мне нужно написать собственный сценарий LUA для такой функциональности?


person user1391049    schedule 14.03.2016    source источник
comment
Думаю, раз уж Tarantool - это NoSQL, вы не сможете использовать синтаксис SQL для написания запросов.   -  person Alex    schedule 14.03.2016
comment
@Alex, запуск tarantool версии 2.0 tarantool поддерживает sql   -  person o2gy    schedule 19.06.2020
comment
Спасибо @ o2gy, вопрос датирован 2016 годом, и несколько лет спустя были выпущены первые альфы версии 2.   -  person Alex    schedule 24.06.2020


Ответы (3)


Да, вы должны написать Lua Script, который будет перебирать пространство и использовать функцию lua gsub в поле 'smth' кортежа. На данный момент нет возможности искать часть строки.

person bigbes    schedule 14.03.2016

Используйте хранимую процедуру для оптимального поиска по префиксу. Например, этот сниппет работает и с кириллическими текстами:

box.schema.create_space('address')
box.space.address:create_index('prefix', { type = 'tree', parts = { { 1, 'str', collation = 'unicode_ci' } }, unique = true })

select_by_prefix = function(prefix)
    local result = {}
    for _, addr in box.space.address.index.prefix:pairs(prefix, { iterator = 'GT' }) do
        if utf.casecmp(utf.sub(addr[1], 1, utf.len(prefix)), prefix) == 0 then
            table.insert(result, addr)
        else
            break
        end
    end
    return result
end
person Dmitry Sharonov    schedule 20.06.2019

Если вы используете tarantool версии 2.x, в вашем запросе нет ничего плохого.

SELECT * FROM "your_space" WHERE "smth" LIKE '%some_value%';
person Dezz    schedule 14.08.2019