• 请教下Elasticsearch7.14向量检索


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 qq_34192377 2024-05-29 14:15 采纳率: 0% 浏览 8 首页/ 大数据 / 请教下Elasticsearch7.14向量检索 elasticsearch 你好 我看您写的Easy-Es对Elasticsearch7.14向量检索,原生脚本写法这篇文章,我使用easy-es创建向量的时候,类型不是DENSE_VECTOR 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

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

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

      展开全部

      评论 编辑记录
    • 阿里嘎多学长 2024-05-29 14:15
      关注

      以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


      您好,针对您在 Elasticsearch 7.14 版本中使用 Easy-Es 库进行向量检索时遇到的类型问题,我可以提供一些指导和参考信息。

      首先,根据 Elasticsearch 官方文档和社区博客[^1^][^2^][^4^][^10^],dense_vector 类型是在 Elasticsearch 7.X 版本中引入的,用于存储浮点类型的密集向量,其最大维度为 2048。这种类型主要用于 k 最近邻 (kNN) 搜索,可以将待查询向量和文档内存储向量之间的距离作为查询评分使用,即越相似的向量评分越高。

      在使用 Easy-Es 创建 dense_vector 类型的向量索引时,您需要确保在索引的映射(mapping)中正确定义了 dense_vector 类型。以下是一个创建 dense_vector 类型索引的示例代码:

      PUT my-index
      {
        "mappings": {
          "properties": {
            "my_vector": {
              "type": "dense_vector",
              "dims": 128  // 指定向量的维度,最大可为2048
            },
            "my_text": {
              "type": "keyword"
            }
          }
        }
      }
      

      接下来,您可以使用 Easy-Es 库来插入文档和向量数据:

      // 假设您已经配置了Easy-Es的客户端 esClient
      IndexRequest indexRequest = new IndexRequest("my-index");
      indexRequest.id("1");
      indexRequest.source(XContentType.JSON, "my_text", "text1", "my_vector", new double[]{0.5, 10, 6});
      esClient.index(indexRequest, RequestOptions.DEFAULT);
      

      如果您在使用 Easy-Es 时遇到类型不是 DENSE_VECTOR 的问题,可能是因为 Easy-Es 库的版本不支持该类型,或者您在创建索引时没有正确设置映射。请确保您使用的 Easy-Es 库版本与 Elasticsearch 7.14 版本兼容,并且您已经按照上述步骤正确设置了索引映射。

      关于参考资料,以下是一些有用的链接,您可以访问这些链接获取更多关于 dense_vector 类型和 Elasticsearch 向量检索的信息:

      希望这些信息能够帮助您解决问题。如果您有其他疑问或需要进一步的帮助,请随时告诉我。

      展开全部

      评论 编辑记录
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    docker提交镜像到阿里ack整体流程
    D. In Love-Codeforces Round 905 (Div. 3)
    M2 Mac Xcode编译报错 ‘***.framework/‘ for architecture arm64
    如何转换图片格式?教你三招一键轻松转换图片格式
    Oracle/PLSQL: VSize Function
    【pytest官方文档】解读- 如何安装和使用插件
    一款免费无限制的AI生成视频工具(不输pika、runway)
    ChatGPT 从零到一打造私人智能英语学习助手
    html 标签简介
    【前段基础入门之】=> 吃透CSS元素盒模型
  • 原文地址:https://ask.csdn.net/questions/8111081