如何计算 Cosmos DB 中的汉明距离?

How to calculate Hemming Distance in CosmosDB?

我的 collection 中的每个项目都有一个 64 位数字,代表图像的 dhash。我想 运行 通过此字段进行查询,这将 return 所有具有汉明距离或多于或小于某个参数的项目。

在MySQL中我会使用BIT_COUNT函数。 CosmosDB 中是否有任何 built-in 类似物?如果不是,那么我的 HAMMING_DISTANCE UDF 应该是什么样子,因为 JS 不支持对 64 位数字的按位运算?

为了解决这个问题,我从 long.js and ImageHash 中获取代码用于 CosmosDB UDF。感谢他们的作者。

在此处查看要点 https://gist.github.com/okolobaxa/55cc08a0d67bc60505bfe3ab4f8bc33c

用法:

SELECT udf.HAMMING_DISTANCE(files.ContentId, '1279796919517872320') FROM files

但请注意几点:

  1. CosmosDB 不支持 64 位数字作为数字,您必须 将它们存储为字符串。
  2. 使用此 UDF 需要大量 RU

我在 CosmosDB 反馈论坛上创建了一个功能请求,以添加 built-in 对此类功能的支持。如果您也对这些想法感兴趣,请为这些想法投票: