elasticsearch,Python,elasticsearch" /> elasticsearch,Python,elasticsearch" />

Python 弹性搜索:如何在查询运行时初始化特征向量以计算余弦相似度?

Python 弹性搜索:如何在查询运行时初始化特征向量以计算余弦相似度?,python,elasticsearch,Python,elasticsearch,我需要为弹性搜索中的脚本查询更改余弦相似性的输入向量。 数据库的文档包含以下字段: densevec,它是稠密_向量类型的特征向量 掩码,这是一个关键字变量,用于指定哪些要素条目有效/无效(例如“110011101”) 然后我想计算一个查询向量的cos sim w.r.,并且只应使用有效字段,因为某些特征条目无效。 到目前为止,我得到了: "query": { "script_score": {

我需要为弹性搜索中的脚本查询更改余弦相似性的输入向量。 数据库的文档包含以下字段:

  • densevec,它是稠密_向量类型的特征向量
  • 掩码,这是一个关键字变量,用于指定哪些要素条目有效/无效(例如“110011101”)
然后我想计算一个查询向量的cos sim w.r.,并且只应使用有效字段,因为某些特征条目无效。 到目前为止,我得到了:

"query": {
                        "script_score": {
                            "query": {
                                "match_all": {}
                            },
                            "script": {
                                "lang":"painless",
                                "source": """
                                    def m1 = doc['mask'].value;
                                    def m2 = params.queryMask;
                                    ArrayList x = new ArrayList();
                                    ArrayList y = new ArrayList(); 
                                    for(int i; i < m1.length(); i++) {
                                        Debug.explain(m1.charAt(i));
                                        if (m1.charAt(i) == '1' && m2.charAt(i) == '1') {
                                            x.add(doc['densevec'][i]);
                                            y.add(params.queryVector[i]);
                                        }
                                        else{
                                                x.add(0);
                                                y.add(0);  
                                            }
                                    }

                                    def d = cosineSimilarity(x, y) + 1.0;
                                    return d;
                                """,
                                "params": {
                                    "queryVector": list(featurevector),
                                    "queryMask": maskstr
                                }    
                            }
                        }
                    }
您好, 基督教徒

 script_stack
                         org.elasticsearch.xpack.vectors.query.ScoreScriptUtils$DenseVectorFunction.<init>(ScoreScriptUtils.java:85)
                         org.elasticsearch.xpack.vectors.query.ScoreScriptUtils$CosineSimilarity.<init>(ScoreScriptUtils.java:175)
                         d = cosineSimilarity(x, y) + 1.0;

...

caused_by:
                         type:illegal_argument_exception
                         reason:For vector functions, the 'field' argument must be of type String or VectorScriptDocValues
doc['densevec'][i]