我有一个具有几个属性的模型 MyModel(attr_1:integer, attr_2:string, attr_3:integer, attr_4: float, …etc, uid: integer)
我需要填充每个记录的uid
字段与独特价值的每个独特组合attr_1
和attr_2
值
然后,我可以根据此组合和琐碎的选择,使用此字段查找所有“半相似”记录
第一个想法是:
"#{attr_1}_#{attr_2}".hash #=>produces long (unique?) integer
但是我不确定它是否能提供我所需要的价值
是吗?还是可以提出更好的解决方案?
如果您可以将uid类型更改为String,则可以使用以下方法。否则,您将必须实现公共密钥加密中的类似功能。
如果您需要使用唯一键查找半相似的记录,则它必须具有两个可分离的部分。
hash1 = Digest::MD5.new << 'attr1'
hash2 = Digest::MD5.new << 'attr2'
然后您可以将uid另存为
hash1[0..6] + "-" + hash2[0..6]
这将创建13个字符字符串(6 +“-” + 6)
然后,您可以在搜索中使用它。
举例:如果您想使用attr1x搜索半相似图片,请在搜索结果中使用它,
attr1xhash = Digest::MD5.new << 'attr1x'
attr1xhash = attr1xhash[0..6]
"like 'attr1x-%'"
对于attr2x
attr2xhash = Digest::MD5.new << 'attr2x'
attr2xhash = attr2xhash[0..6]
"like '%-attr2x'"
注意:对于不相等的属性,有可能获得2个相等的字符串。您可以通过增加字符串大小来最小化它。(这里6)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句