You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用weakAnd查询array<string>属性时为何未获预期排序结果?

问题描述

我有一个包含以下两个字段的文档配置:

field label type string {
    indexing: summary | index | attribute
    index: enable-bm25
    attribute: fast-search
}

field titles type array<string> { 
    indexing: index | summary | attribute
    index: enable-bm25
    attribute: fast-search
}

对应的排序配置如下:

rank-profile profile {
    first-phase {
        expression: max(textSimilarity(label),elementSimilarity(titles))
    }
}

我的需求是召回满足以下任一条件的文档:

  • 字段label同时包含“Hot”和“Springs”两个词
  • 字段titles数组中的某一个元素同时包含“Hot”和“Springs”两个词

预期排名第一的文档为:(该文档的label恰好包含两个目标词)

{
   "label": "Hot Springs",
   "titles": []
}

我执行了如下查询:

select * from DOC_NAME where weakAnd (label contains "Hot", label contains "Springs", titles contains "Hot", titles contains "Springs")

但上述预期文档甚至未出现在前10条结果中。

若将查询中的weakAnd替换为OR,结果符合预期:

select * from DOC_NAME where label contains "Hot" OR label contains "Springs" OR titles contains "Hot" OR titles contains "Springs"

此时预期文档会作为TOP结果返回。

即使使用如下查询,预期文档也能成为TOP结果:

select * from DOC_NAME where weakAnd (label contains "Hot", label contains "Springs") OR weakAnd( titles contains "Hot", titles contains "Springs")

为什么用weakAnd组合所有四个条件时,无法将预期文档列为TOP结果?

原因解析

问题核心在于weakAnd的工作逻辑:

  • weakAnd并非宽松版的“或”,它的本质是优先召回匹配条件数量更多的文档,所有条件都会参与评分计算。文档匹配的条件越多,得分越高,排名越靠前。
  • 你的预期文档中titles是空数组,完全不满足titles contains "Hot"和titles contains "Springs"这两个条件,所以它只匹配了4个条件中的2个。
  • 而其他文档可能匹配更多条件(比如某文档的label包含一个词,titles里包含两个词,总共匹配3个条件;或者某文档的titles元素同时包含两个词,再加上label包含其中一个,匹配3个条件),这些文档的得分会超过只匹配2个条件的预期文档,导致它被挤到后面,甚至排不到前10。

反观另外两种可行的查询:

  1. 用OR的查询:只要满足任意一个条件就会被召回,预期文档的label完全匹配两个目标词,textSimilarity(label)的得分远高于其他只匹配单个词的文档,因此排名第一。
  2. 两个weakAnd加OR的查询:第一个weakAnd的条件正好命中预期文档(label同时包含两个词),满足这个子条件的文档会被召回,再加上排序逻辑取textSimilarity(label)的最大值,预期文档的得分最高,自然排第一。

总结:把四个条件放进同一个weakAnd时,预期文档因缺少titles相关条件的匹配,得分被其他匹配更多条件的文档超越,所以无法进入前列。

内容的提问来源于stack exchange,提问作者teovob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 22:32:53