【问题标题】:SQL LIKE query in TarantoolTarantool 中的 SQL LIKE 查询
【发布时间】:2016-06-29 11:45:34
【问题描述】:

在 Tarantool DB 中使用 SQL LIKE 关键字进行查询的正确方法是什么? 例如:

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

我是否可以使用索引的一部分来搜索值,或者我需要为此类功能编写自己的 LUA 脚本?

【问题讨论】:

  • 我认为由于 Tarantool 是 NoSQL,您将无法使用 SQL 语法来编写查询。
  • @Alex,启动 tarantool 2.0 版 tarantool 支持 sql
  • 谢谢@o2gy,这个问题的日期是 2016 年,第 2 版的第一个 alpha 版本是几年后发布的。

标签: sql sql-like tarantool


【解决方案1】:

是的,你应该编写 Lua 脚本,它会遍历空间并在元组的 'smth' 字段上使用 lua 函数 gsub。 目前无法搜索字符串的一部分。

【讨论】:

    【解决方案2】:

    使用存储过程进行基于前缀的最佳搜索。 例如,这个 sn-p 也适用于西里尔文字:

    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
    

    【讨论】:

      【解决方案3】:

      如果您使用 tarantool 版本 2.x,您的查询没有任何问题。

      SELECT * FROM "your_space" WHERE "smth" LIKE '%some_value%';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-15
        • 1970-01-01
        • 1970-01-01
        • 2018-09-18
        • 2017-08-15
        • 1970-01-01
        • 2021-04-12
        相关资源
        最近更新 更多