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

piztneat  于 2021-05-27  发布在  ElasticSearch
关注(0)|答案(0)|浏览(193)

我已经建立了一个数据库ElasticSearch后端,其中包含的文件有密集的向量作为特征。我想在运行时使用脚本查询到带有特征向量的数据库。为此,我使用余弦相似性,但到目前为止,只在整个特征向量之间。但是在查询的时候,我想用一个掩码向量过滤特征,只得到一个子集的条目。然后我要计算余弦相似性。
我的数据库Map如下所示:

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

有没有可能通过ElasticSearch实现这样的功能?这将是伟大的,因为否则将很难实现这种搜索的特征向量与掩模组合。
干杯,克里斯蒂安

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题