你好 我看您写的Easy-Es对Elasticsearch7.14向量检索,原生脚本写法这篇文章,我使用easy-es创建向量的时候,类型不是DENSE_VECTOR
2条回答 默认 最新
关注引自免费微信小程序:皆我百晓生
在Elasticsearch 7.14中,向量检索支持多种类型的向量数据,包括DENSE_VECTOR、SparseFloatVector和SPARSE_LONG_VECTOR。如果你想要使用非DENSE_VECTOR类型,比如SparseFloatVector,你需要确保你的映射配置正确,并且在索引文档时提供正确的向量格式。
首先,让我们定义一个包含SparseFloatVector字段的映射。在这个例子中,我们创建一个名为
my_index的索引,并设置一个名为vector_field的SparseFloatVector字段:from elasticsearch import Elasticsearch, helpers # 连接Elasticsearch实例 es = Elasticsearch() # 定义映射 mapping = { "mappings": { "properties": { "vector_field": { "type": "dense_vector", "dimension": 50, "params": { "format": "SPARSE" } } } } } # 创建索引并应用映射 if not es.indices.exists(index="my_index"): es.indices.create(index="my_index", body=mapping) # 示例向量数据 vector_data = [[0.1, 0.2, 0.3, 0.4, 0.5], [0.6, 0.7, 0.8, 0.9, 1.0]] # 索引文档 def index_document(vector): return { "_index": "my_index", "_source": { "vector_field": vector } } actions = (index_document(vec) for vec in vector_data) helpers.bulk(es, actions) # 搜索示例 query = { "script_score": { "query": {"match_all": {}}, "script": { "source": """ double dot_product = script_fields['vector_field'].dotProduct(params.query_vector); return dot_product; """, "params": { "query_vector": [0.2, 0.3, 0.4, 0.5, 0.6] }, "lang": "painless" } } } response = es.search(index="my_index", body=query)这段代码首先连接到Elasticsearch实例,然后定义了一个名为
my_index的索引及其映射,其中vector_field是一个SparseFloatVector类型。接下来,我们索引了两个示例向量数据。最后,我们执行了一个基于向量相似度的搜索查询。注意,这里使用的
params.query_vector是你希望与索引中的向量进行比较的查询向量。这个查询将返回最接近给定查询向量的文档,并根据它们之间的余弦相似度进行排序。如果你遇到任何问题,或者需要进一步的帮助,请随时告诉我。
解决 无用评论 打赏 举报 编辑记录