是否可以根据两个不同浮点数组的余弦相似度进行排序?类似于如何通过将坐标传递给排序来按地理距离排序?
答案 0 :(得分:0)
如果一个数组是输入,我是可能的,但是您必须将余弦相似度实现为脚本:
"script": {
"lang": "painless",
"source": """
def vector = params._source[params.vector_field];
def dot_product = 0.0;
def v_norm = 0.0;
for (int i = 0; i < params.query_vector.length; ++i) {
def x = vector[i];
dot_product += x * params.query_vector[i];
v_norm += x * x;
}
return v_norm > 0 ? dot_product / (params.query_v_norm * Math.sqrt(v_norm)) : -1;
"""
}
但是它使用字段source
,该字段可能很慢。 See this other question to make it faster