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
是否可以通过弹性搜索实现类似的功能?
这将是非常好的,因为否则,用掩码组合实现特征向量的搜索将困难得多
干杯,
基督教徒