添加distinct排序信息
例如:检索关键词“手机”共获得10个结果,分别为:doc1,doc2,doc3,doc4,doc5,doc6, doc7,doc8,doc9,doc10。其中前三个属于用户A,doc4-doc6属于用户B,剩余四个属于用户C。
如果前端每页仅展示5个商品,则用户C将没有展示的机会。但是如果按照user_id进行抽取,每轮抽
取1个,抽取2次,并保留抽取剩余的结果,则可以获得以下文档排列顺序:doc1、doc4、doc7、
doc2、doc5、doc8、doc3、doc6、doc9、doc10。可以看出,通过distinct排序,各个用户的
商品都得到了展示机会,结果排序更趋于合理。
更多说明请参见
API distinct子句
请求参数
参数名称 | 类型 | 描述 |
key | string | 为用户用于做distinct抽取的字段,该字段要求建立Attribute索引。 |
distCount | int | 为一次抽取的document数量,默认值为1。 |
distTimes | int | 为抽取的次数,默认值为1。 |
reserved | string | 为是否保留抽取之后剩余的结果,true为保留,false则丢弃,丢弃时totalHits的个数会减去被distinct而丢弃的个数,但这个结果不一定准确,默认为true。 |
distFilter | string | 为过滤条件,被过滤的doc不参与distinct,只在后面的 排序中,这些被过滤的doc将和被distinct出来的第一组doc一起参与排序。默认是全部参与distinct。 |
updateTotalHit | string | 当reserved为false时,设置update_total_hit为true,则最终total_hit会减去被distinct丢弃的的数目(不一定准确),为false则不减;默认为false。 |
maxItemCount | int | 设置计算distinct时最多保留的doc数目。 |
grade | number | 指定档位划分阈值。 |
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在阿里云的OpenSearch服务中,为了实现如您所描述的更合理的搜索结果排序,确保不同用户的商品都能获得展示机会,可以利用distinct
子句来优化检索逻辑。您的示例代码片段展示了如何在搜索请求中添加distinct
功能,以实现分批次、按用户或其他指定字段进行去重抽取,进而平衡不同来源数据的展示机会。
user_id
),要求此字段已建立Attribute索引。false
表示丢弃未被抽取到的结果,设为true
则保留。reserved
为false
且此参数为true
时,会更新返回的总命中数(totalHits),减去因distinct而丢弃的文档数。$search_obj->addDistinct($key, 3, 4, 'false', '', 'true');
这段代码的意思是:针对某个查询(比如关键词“手机”),从搜索结果中,按照$key
字段(假设为user_id
)进行去重抽取。每次抽取3个不同的文档(distCount=3
),总共抽取4轮(distTimes=4
)。抽取过程中,不保留剩余未被抽取到的文档(reserved='false'
),并且会更新总的搜索结果计数,减去因distinct操作而排除的文档数量(updateTotalHit='true'
)。
这样的策略能够有效提升搜索结果的多样性和公平性,特别是在需要平衡多个卖家或来源展示机会的场景下非常有用。通过精细调整这些参数,可以根据实际业务需求定制化搜索结果排序逻辑。