【发布时间】:2019-10-03 21:05:57
【问题描述】:
我在 Windows x64 上使用稳定的 RavenDB 4.2.3,试图通过 id 从另一个索引加载人工文档。
我正在开发一个 ETL 系统,其中很大一部分工作是地址验证。我有有效地址的参考数据,包括国家、州、邮政编码、城市/社区、街道和门牌号码范围(如果适用)以及 LAT/LON、社区类型等附加信息。 要验证的典型输入将由数万或数十万个地址记录(通常是邮政编码、社区、街道、门牌号)组成,其中大约 30% 与参考数据中的记录不匹配(当然,在标准化之后),因为拼写错误、换位等。
我假设我必须使用模糊查询逐个查询,然后使用预定义的 Levenshtein-Damerau 距离自动更正或过滤掉以进行手动更正(同时提供最佳匹配)。
但是其他 70% 左右的确实在参考数据中有直接匹配?那些我不想查询的,因为网络延迟等等,即使精确查询比模糊查询更快。我需要一个索引。
由于我无法在索引定义中查询,我的想法是从该参考数据构建一个集合,使用(标准化)地址部分的散列值来查找(减去门牌号)并将所述散列用作实体 ID 的一部分(甚至直接使用地址部分),存储规范化和规范化地址;因此我可以在要验证的地址的索引中使用此参考集合上的 LoadDocument() 来测试 100% 可验证的地址(LoadDocument() 返回非空实体并且门牌号在返回的参考地址的范围内)并过滤掉那些我必须进行较慢查询的。
考虑到要求,这听起来是一个很好的解决方案,还是我在这里遗漏了一些东西并且有更好、更 RavenDB-ish 的方式?
我认为不可能的一件事是将所述参考集合构建为 map/reduce 索引的输出,因为我无法控制 Id 生成; Id 被定义为按字段分组的散列,但我无权访问索引定义中的此散列函数以验证要验证的地址,以便将其结果用作 LoadDocument() 的文档 Id 参数。
我发现控制人工文档 ID 生成的功能存在问题,但尚未完成: https://issues.hibernatingrhinos.com/issue/RavenDB-12932
【问题讨论】:
-
这个问题正在积极处理中,很可能会出现在 RavenDB 的下一个版本中,这会解决您的问题,不是吗?
-
是的,当然。这是使输出集合更加有用的功能缺失的部分。再次感谢您的快速跟进。
标签: data-modeling ravendb ravendb4