【问题标题】:SQLite search inside a column with JSON insideSQLite 在包含 JSON 的列内搜索
【发布时间】:2019-07-23 18:16:01
【问题描述】:

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

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

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

  • 使用 FTS 创建虚拟表?它是如何工作的?
  • 更改/制作数据库副本,其中这些字段在各自的列中拆分(即RUGRIT 等)。

你有什么建议和一个简单的实现?

【问题讨论】:

    标签: json sqlite sqlite-json1


    【解决方案1】:

    如果您的 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 子对象提取到表格的行中(而不是每种语言一列,随着语言数量的增长,这很快变得笨拙),可能会更好选项:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      • 2020-09-27
      • 2018-11-05
      相关资源
      最近更新 更多