SQLite 在 JSON 列内搜索

SQLite search inside a column with JSON inside

我有一个 SQLite 数据库,其中一个名为 i18n 的列包含一个 JSON 树,其中包含一些本地化字符串。 例如:

{"gr":{"name":"NAME_IN_GR"},"ru":{"name":"NAME_IN_RU"}}

现在我应该在已通过本地化的 name 节点内搜索用户键入的部分字符串。 我最初的尝试是使用正则表达式,但我担心它可能会慢一点(即使操作受到限制,一切都应该在用户键入时发生)。 现在我在考虑另外两种方式:

你有什么建议和简单的实现方式?

如果您的 sqlite 实例是在启用 JSON1 extension 的情况下编译的,那很简单:

SELECT * FROM yourtable AS t
WHERE EXISTS (SELECT j.id FROM json_each(t.i18n) AS j
              WHERE json_extract(j.value, '$.name') LIKE 'NAME_IN%');

但是,您的第二个想法略有不同,将所有这些 JSON 子对象拉出到 table 的行中(而不是每种语言一列,这很快就会变得笨拙,因为语言数量增加),可能是更好的选择:

CREATE TABLE translations(original TEXT, language TEXT, translated TEXT
                        , PRIMARY KEY(original, language)) WITHOUT ROWID;
INSERT INTO translations VALUES ('name', 'ru', 'название');
-- etc.

可扩展、更容易检查和更新数据、让您只检索相关位、性能更好等。