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

Azure Cognitive Search中基于ComplexType字段的历史报价查询如何实现?

Azure Cognitive Search 历史报价差值查询实现方案

该需求完全可以通过 Azure Cognitive Search 的过滤查询能力实现,具体操作如下:

前置调整(必须完成)

你当前的字段配置不支持数值比较运算,需要先调整索引结构:

  • 将 SellerOffers/offers/offerPrice 的字段类型从字符串改为 Edm.Double 或 Edm.Decimal,同时开启字段的 filterable 属性,只有数值类型的可过滤字段才能参与大小比较运算
  • 建议在索引顶层新增一个可过滤的 Edm.Double 类型字段 currentOfferPrice,每次新增报价时同步写入最新报价的值(即示例中日期最新的15.00),该优化可以大幅降低查询复杂度、提升查询性能

具体查询写法

方案1(推荐,已新增currentOfferPrice字段)

直接使用集合的 any 运算符判断是否存在符合条件的历史报价即可,过滤语句如下:

$filter=SellerOffers/offers/any(o: o.offerPrice lt currentOfferPrice * 0.8)

该查询会直接返回所有存在至少一条报价低于当前报价80%(即低于当前报价20%)的产品记录。

方案2(不新增额外字段)

如果不想新增存储字段,也可以直接在查询中通过聚合函数取最新报价做对比,性能会略低于方案1,过滤语句如下:

$filter=SellerOffers/offers/any(hist: hist.offerPrice lt (SellerOffers/offers/$top(1, o: o.offerDate desc).offerPrice) * 0.8)

额外说明

如果你需要限定对比的是同个卖家的历史报价,仅需要在过滤条件中增加卖家ID的匹配条件即可,整体逻辑无需调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:18:03