开发者社区 问答 正文

PhpSDK的搜索如何操作?(16)



添加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子句

请求参数

参数名称类型描述
keystring为用户用于做distinct抽取的字段,该字段要求建立Attribute索引。
distCountint为一次抽取的document数量,默认值为1。
distTimesint为抽取的次数,默认值为1。
reservedstring为是否保留抽取之后剩余的结果,true为保留,false则丢弃,丢弃时totalHits的个数会减去被distinct而丢弃的个数,但这个结果不一定准确,默认为true。
distFilterstring为过滤条件,被过滤的doc不参与distinct,只在后面的 排序中,这些被过滤的doc将和被distinct出来的第一组doc一起参与排序。默认是全部参与distinct。
updateTotalHitstring当reserved为false时,设置update_total_hit为true,则最终total_hit会减去被distinct丢弃的的数目(不一定准确),为false则不减;默认为false。
maxItemCountint设置计算distinct时最多保留的doc数目。
gradenumber指定档位划分阈值。


函数定义

function addDistinct($key, $distCount = 0, $distTimes = 0,$reserved = '', $distFilter = '', $updateTotalHit = '',$maxItemCount = 0, $grade = '')

使用示例

//每次抽取3条文档,抽取4次,丢掉抽取之后的结果,并且更新搜索结果中总文档的个数$search_obj->addDistinct($key, 3, 4, 'false', '', 'true');

展开
收起
轩墨 2017-10-25 13:33:03 1716 分享 版权
阿里云 AI 助理回答

在阿里云的OpenSearch服务中,为了实现如您所描述的更合理的搜索结果排序,确保不同用户的商品都能获得展示机会,可以利用distinct子句来优化检索逻辑。您的示例代码片段展示了如何在搜索请求中添加distinct功能,以实现分批次、按用户或其他指定字段进行去重抽取,进而平衡不同来源数据的展示机会。

解释参数含义:

  • key: 这是用于执行distinct操作的字段名,比如用户ID(user_id),要求此字段已建立Attribute索引。
  • distCount: 指定每次抽取的文档数量。例如,设置为3意味着每轮抽取3个不同的结果。
  • distTimes: 抽取的轮次。如果设为4,则会按照规则抽取4轮。
  • reserved: 是否保留经过distinct处理后剩余的结果。设为false表示丢弃未被抽取到的结果,设为true则保留。
  • distFilter: 用于过滤的条件,被过滤的文档不参与distinct过程,但会在最终排序时与第一组distinct出的文档一起排序。
  • updateTotalHit: 当reservedfalse且此参数为true时,会更新返回的总命中数(totalHits),减去因distinct而丢弃的文档数。
  • maxItemCount: 在计算distinct时最多考虑的文档数目,有助于控制内存使用。
  • grade: 指定档位划分阈值,用于更复杂的排序或分组需求。

使用示例解析:

$search_obj->addDistinct($key, 3, 4, 'false', '', 'true');

这段代码的意思是:针对某个查询(比如关键词“手机”),从搜索结果中,按照$key字段(假设为user_id)进行去重抽取。每次抽取3个不同的文档(distCount=3),总共抽取4轮(distTimes=4)。抽取过程中,不保留剩余未被抽取到的文档(reserved='false'),并且会更新总的搜索结果计数,减去因distinct操作而排除的文档数量(updateTotalHit='true')。

这样的策略能够有效提升搜索结果的多样性和公平性,特别是在需要平衡多个卖家或来源展示机会的场景下非常有用。通过精细调整这些参数,可以根据实际业务需求定制化搜索结果排序逻辑。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: