找到与数据存储的相似之处

Find similarities with datastore

假设用户可以输入多个字符串,服务器对其进行处理并将其存储在数据存储区中。是否可以查询相似性的数量(没有任何解决方法)?或者对此有更好的解决方案吗?

示例查询: 获取值类似于 "a, b, c"

的 ID

Returns: 1, 8, 9, 6, 10, 等等

示例数据:

您应该修正您的数据结构,使每个 ID 和值占一行。 SQL.

中的字符串操作函数不是特别好

有了你的数据,你可以这样做:

select t.*,
       ((case when ',' || value || ',' like '%,a,%' then 1 else 0 end) +
        (case when ',' || value || ',' like '%,b,%' then 1 else 0 end) +
        (case when ',' || value || ',' like '%,c,%' then 1 else 0 end)
       ) as nummatches
from t
order by nummatches desc;

连接运算符因数据库而异;它可能是 +&concat()

您不能在数据存储上使用 SQL 之类的查询。数据存储使用高效但非常有限的索引。

但是,您可以在同一个对象的单个索引中重复条目。

因此,如果您有像 (a,b,c,d) 这样的有限集合,那么一种方法是 按排序顺序存储所有组合:

object 1: tags = ["a", "b", "c", "ab", "bc", "abc"]
object 2: tags = ["a", "c", "d", "ac", "cd", "acd"]

您还可以搜索前缀,即索引字符串的前 N ​​个字母。

另一种方法是查询包含 "a" 的所有对象,然后查询包含 "b" 的所有对象等,然后在软件中进行交集。在您的示例中,这将是相当低效的。如果您只出现几次相同的值并且只请求键,那么在从数据存储请求实际对象之前进行交集会很有效。

为支持高效查询的 Datastore 设计模型可能具有挑战性,需要大量规划。如果您只处理小型数据集,您可以考虑使用 CloudSQL 解决方案。