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
相关产品推荐
相关产品推荐

