Elasticsearch - 基于浮点数组的余弦相似性排序

时间:2017-10-30 17:34:51

标签: elasticsearch

是否可以根据两个不同浮点数组的余弦相似度进行排序?类似于如何通过将坐标传递给排序来按地理距离排序?

1 个答案:

答案 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