elasticsearch,cosine-similarity,Python,elasticsearch,Cosine Similarity" /> elasticsearch,cosine-similarity,Python,elasticsearch,Cosine Similarity" />

Python 弹性搜索:可以将密集向量和二进制掩码的脚本分数查询结合起来吗?

Python 弹性搜索:可以将密集向量和二进制掩码的脚本分数查询结合起来吗?,python,elasticsearch,cosine-similarity,Python,elasticsearch,Cosine Similarity,我已经建立了一个具有弹性搜索后端的数据库,其中包含具有密集向量作为特征的文档。 我想在运行时使用脚本查询到带有特征向量的数据库。对于这一点,我使用余弦相似性,但到目前为止,仅在整个特征向量之间。但在查询时,我想用掩码向量过滤特征,以仅获得条目的子集。然后我想计算余弦相似性 我的数据库映射如下所示: mapping = { "mappings": { "properties": {

我已经建立了一个具有弹性搜索后端的数据库,其中包含具有密集向量作为特征的文档。 我想在运行时使用脚本查询到带有特征向量的数据库。对于这一点,我使用余弦相似性,但到目前为止,仅在整个特征向量之间。但在查询时,我想用掩码向量过滤特征,以仅获得条目的子集。然后我想计算余弦相似性

我的数据库映射如下所示:

mapping = {
        "mappings": {
            "properties": {
                   "imageid": {
                            "type": "text"
                    },
                     "score": {
                            "type": "float"
                     },
                      'feature': {
                              "type": "dense_vector",
                              "dims": dim
                       }
                      'maskvec': {
                              "type": "dense_vector", #is there an boolean/bit vector type?
                              "dims": dim
                       }
            }               
        }
    }
到目前为止,脚本分数查询如下所示:

"script_score": {
                            "query": {
                                "match_all": {}
                            },
                            "script": {
                                "lang":"painless",
                                "source": """
                                return cosineSimilarity(params.queryVector, feature) + 1.0
                                """,
                                "params": {
                                    "queryVector": list(featurevector)
                                }    
                            }
                        }
#Pseudocode
mask = params.querymask and maskvec
queryvec = params.queryVector[mask]
featurevec = feature[mask]
return cosineSimilarity(queryvec, featurevec) + 1.0
我想做这样的事情:

"script_score": {
                            "query": {
                                "match_all": {}
                            },
                            "script": {
                                "lang":"painless",
                                "source": """
                                return cosineSimilarity(params.queryVector, feature) + 1.0
                                """,
                                "params": {
                                    "queryVector": list(featurevector)
                                }    
                            }
                        }
#Pseudocode
mask = params.querymask and maskvec
queryvec = params.queryVector[mask]
featurevec = feature[mask]
return cosineSimilarity(queryvec, featurevec) + 1.0
是否可以通过弹性搜索实现类似的功能? 这将是非常好的,因为否则,用掩码组合实现特征向量的搜索将困难得多

干杯, 基督教徒