qq_34192377 2024-05-29 14:15 采纳率: 0%
浏览 23

请教下Elasticsearch7.14向量检索

你好 我看您写的Easy-Es对Elasticsearch7.14向量检索,原生脚本写法这篇文章,我使用easy-es创建向量的时候,类型不是DENSE_VECTOR

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-29 14:15
    关注

    引自免费微信小程序:皆我百晓生

    在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是你希望与索引中的向量进行比较的查询向量。这个查询将返回最接近给定查询向量的文档,并根据它们之间的余弦相似度进行排序。

    如果你遇到任何问题,或者需要进一步的帮助,请随时告诉我。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月29日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?