gpt4 book ai didi

java - 按列表过滤 - Objectify

转载 作者:行者123 更新时间:2023-12-01 18:59:04 26 4
gpt4 key购买 nike

此查询有效,fullPath字段是 List<String> :

    KeyLookup lookup 
= ofy().load().type(KeyLookup.class).filter("fullPath IN", key.getFullPath()).first().get();

上面的查询还获取具有相同 String 的实体List<String> 中的元素与 key.getFullPath() 一样,但是它还会获取列表中具有相同字符串的实体以及列表中附加的 more 字符串。

如何仅过滤列表中具有完全相同元素的实体,例如“不多不少”

更新:

例如

一个实体(例如 Object1)字段 fullPath 包含:

  • “一”
  • “两个”
  • “三”

另一个实体(例如 Object2)字段 fullPath 包含:

  • “一”
  • “两个”
  • “三”
  • “四”

并且 key.getFullPath 包含:

  • “一”
  • “两个”
  • “三”
  • “四”

那么上面的查询将返回Object1Object2 ,但是我需要的是它只返回 Object2

最佳答案

假设您想要精确匹配(没有更多值,也没有更少值),则没有“ native 数据存储”方法可以实现此目的。 IN 为您提供一个 操作,多次调用filter() 为您提供一个and 操作 - 两者都不完全匹配。不过,还是有办法的。

选项 1:将列表加入单个索引属性

将列表中的所有项目连接成一个值并将其存储为合成索引属性。也许您需要根据订单或案例的重要性对其进行标准化。查询该属性,而不是列表属性。

仅当连接值保证小于 500 个字符时,此方法才有效。似乎不太可能。相反,您可能想要...

选项 2:对列表的哈希值进行索引和查询

  1. 创建一个综合属性,用于保存所有列表值的哈希值,例如 fullPathHash。它不需要加密安全; MD5 没问题。
  2. 每当您更新列表属性时,都会更新哈希。
  3. 索引fullPathHash;您不需要为列表属性建立索引。
  4. 当您查询项目列表时,请查询哈希。由于可能存在冲突,因此请执行查询后检查以确保列表相等并跳过任何误报。

关于java - 按列表过滤 - Objectify,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12949452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com