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

在Solr中如何将按ISBN分组的多页图书数据归入同一元数据下

Solr按ISBN分组合并图书分页数据解决方案

有两种落地成本较低的实现方式,分别是业务侧二次处理、Solr侧调整查询参数直接返回:

  • 业务侧二次处理(最稳妥,无需修改Solr配置和现有查询逻辑)
    你当前的分组查询已经拿到了每个ISBN对应的前三页数据,只需要在业务代码中按ISBN做一次简单聚合即可:同个ISBN对应的Title、Author都是固定值,把分组下第一条Page内容赋值给Page1,第二条给Page2,第三条给Page3,就能直接拼成你需要的结构,开发成本极低,也不会影响现有查询的性能。
  • Solr侧直接返回目标格式(适合不想修改业务代码的场景)
    你可以使用Solr的JSON Facet功能实现,调整后的查询参数示例如下:
http:(你的Solr服务地址)select?
wt=json
defType=edismax
df=PublicationName
qf=PublicationName OCRText
q=Three Little Piggies AND IsAuthorized:true AND IsDirectory:false AND IsIndex:false AND IsBooktitle:false
rows=0
json.facet={
  "books":{
    "type":"terms",
    "field":"ISBN",
    "limit":100, // 可自定义匹配图书的最大返回数量
    "facet":{
      "Title":"first(PublicationName)",
      "Author":"first(AuthorName)",
      "Page1":"min(if(eq(page_number,1),Text,missing))",
      "Page2":"min(if(eq(page_number,2),Text,missing))",
      "Page3":"min(if(eq(page_number,3),Text,missing))"
    }
  }
}

注意:上述参数中的page_number需要替换为你Solr中存储页码的实际字段名;如果不需要严格匹配1、2、3的页码,只需要返回分组下前三页内容,可以将Page1/2/3的聚合规则替换为"Pages":"top(3,page_number,Text)",拿到结果后做简单拆分即可。

额外优化提示:如果你使用的是Solr 7及以上版本,也可以在原有分组查询的基础上添加group.format=simple参数简化分组返回的结构,减少业务侧的解析代码量,但该参数无法直接返回平级的Page1/2/3字段结构,仍需要做少量二次处理。

内容的提问来源于stack exchange,提问作者李伯均

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:06:03