V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wueryi
V2EX  ›  Elasticsearch

请教个 es 向量查询的问题

  •  1
     
  •   wueryi · 139 天前 · 2376 次点击
    这是一个创建于 139 天前的主题,其中的信息可能已经有所发展或是发生改变。

    背景:

    • 根据一段文案(假设为商品标题)的向量值在 es 中查询出相似的文案(商品) knn_search
    • 向量维度是 1024 维度 余弦函数计算距离
    • 目前已有数据是 600w 左右 整体 es 数据量在 250g 左右
    • es 节点 8c32g *3

    问题

    目前想前台使用这种向量查询的结果 但是问题是目前单次查询的效率很低基本上得 60s 左右才能返回。

    • 有大佬有经验这种量级的查询大概需要升配到什么配置吗?
    • 或者有什么其他的查询优化方案吗?

    其他

    • 为啥非得用 es 不用其他向量库 例如 milvus ?:因为存量数据在这儿,所以暂时没有迁移。
    • 另外我看到的有限的返回结果中,很多文案相近但是不是同一个商品的也会被查询出来,准确率其实有待考证。
    22 条回复    2024-06-24 09:43:32 +08:00
    somebody1
        1
    somebody1  
       139 天前
    不懂。
    建议你去 es 的社区发问题!
    wueryi
        2
    wueryi  
    OP
       139 天前
    @somebody1 #1 😁😁
    fffflyfish
        3
    fffflyfish  
       139 天前
    向量做下降维呗,1024 太长了,商品标题一般也就 60~128 维差不多够用了
    wanghello
        4
    wanghello  
       139 天前
    redis search 咋样
    jetyang
        5
    jetyang  
       139 天前
    1.ES 做向量检索就是慢,了解一下 ANN ,近似查询才能加速
    2.向量检索就是考虑到意思相近但不是同样的文字,如果要同一个干嘛启用向量查询
    my3157
        6
    my3157  
       139 天前 via Android
    试下 meilisearch
    wueryi
        7
    wueryi  
    OP
       139 天前
    @fffflyfish #3 主要是存量数量里已经有 1024 维度的了,刷数据的话时间比较长。另外就是没有具体试过降维会不会准确率降低,余弦函数的距离我理解应该不会降低准确率。
    wueryi
        8
    wueryi  
    OP
       139 天前
    @jetyang #5 我试了 ANN 这个配置对应这个量级 快不了多少 ,都是几十 s 上下,2.应用的场景其实就是针对不同平台同一个商品,进行搜索,并不是一样的文案,大概率都是相似文案。
    fffflyfish
        9
    fffflyfish  
       139 天前
    @wueryi 降维对效果的影响你在 STS dataset 上实际测下就知道了,看上面 ANN 都加速不了的话你只能在准确率和计算耗时之间权衡了,或者你调研下有没有基于 GPU 的向量检索方案
    picone
        10
    picone  
       139 天前
    @wueryi #8 ANN 不可能这么慢,百万级规模也不算特别大,不需要上到 GPU 。降维试试不影响准确召回即可。有个问题是这个数据集存在更新吗,更新频繁吗?除了 ES 外也有其它专门做向量检索的项目可以都调研下对比下
    wueryi
        11
    wueryi  
    OP
       139 天前
    @picone #10 存在更新 但是不频繁,在试 milvus 但是目前没有这么大的量供测试😂
    wueryi
        12
    wueryi  
    OP
       139 天前
    @fffflyfish #9 GET 感谢老哥
    monkeyk
        13
    monkeyk  
       139 天前
    这类问题要先找到根源在哪,像 milvus 之类的向量库都推荐使用 GPU 来部署;
    一般能想到的就是 CPU 的并发支持 没有 GPU 高。
    尝试找一些官方提供的 debug 工具试试
    OPLUS
        14
    OPLUS  
       139 天前
    之前做过 128 维的测试,默认索引下 es 就是比 milvus 慢很多。
    Chris2023
        15
    Chris2023  
       139 天前
    如果是优化方案:1.纬度太大 2.数据更新是否频繁 3.磁盘最好是 SSD 4.内存利用率可以看一下。 向量查询还是要用向量数据库来承载,ES 一般不这么用。
    picone
        16
    picone  
       139 天前
    @wueryi #11 PQ 量化,分库这些都可以搞上去试试,百万级数据单机理论上是可以处理的,牺牲少量召回准确率。

    如果使用 ANN 的话,更新的量看大不大,大的话可以单独作为一个子库做倒排并行检索,然后日/月粒度全量重新建库就好了。
    OblivionStaff
        17
    OblivionStaff  
       139 天前
    可以试着问问 llm 。Kimi 智能助手的对话 https://kimi.moonshot.cn/share/cppadj8nsmmif30hv83g
    wxf666
        18
    wxf666  
       139 天前
    请教一下,这是一种更高级的全文搜索吗?

    比如,要是用到 V2EX 的搜索里,就能以自然语言形式,搜出更匹配的帖子/回复来,而不是关键词/近义词匹配而已?

    某个字符串的 1024 纬度数据,是咋来的呢?每个纬度,是代表某个方向上的相关程度吗?(如动物/人类/编程/工地/……)
    qieqie
        19
    qieqie  
       139 天前 via iPhone
    ES knn 性能就是低的匪夷所思,甚至比 ssd ondisk 索引方案还低一个数量级。
    wueryi
        20
    wueryi  
    OP
       134 天前
    @Chris2023 #15 是的本来打算是用 milvus 只是当前数据存在 es 里 es 刚好支持 所以测试一下性能 然后发现确实别我想想的要更差一点儿。然后分析原因的时候不确定是不是配置的问题导致的。
    wueryi
        21
    wueryi  
    OP
       134 天前
    @picone #16 好的 我们业务量级可能得 1kw 左右,当前存的大概是 600w ,更新的频率不频繁 目前我升配到 8c32g 3 个节点 无论还是 ann 还是 knn 性能都是比较差劲的😅 不知道是不是我哪个环境设置的不对
    wueryi
        22
    wueryi  
    OP
       134 天前
    @qieqie #19 😅😅 确实优点出乎意料 我查阅其他资料来看 es 的向量搜索还可以 不知道是不是我哪个环境操作的有问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1308 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 23:33 · PVG 07:33 · LAX 15:33 · JFK 18:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.