陋室铭
永远也不要停下学习的脚步(大道至简至易)

posts - 2169,comments - 570,views - 413万

摘要: Solr查询每一次返回的数据都有一定的顺序,特定顺序的结果对于业务来说可能非常重要。

不指定排序

一般我们不指定排序规则,这样的结果能满足大部分需求,默认是用文档的得分作为排序标准。相当于加上了参数sort=score desc,这里的score是solr的一个隐藏字段,衡量这个文档对于该查询参数的权重。使用如下的HTTP查询请求:
http://localhost:8080/solr/core/select?q=*:*&fl=*,score
返回数据:

{
  "responseHeader":{
    "status":0,
    "QTime":0,
    "params":{
      "q":"*:*",
      "fl":"*,score",
      "wt":"json"}},
  "response":{"numFound":106,"start":0,"maxScore":1.0,"docs":[
      {
        "id":"c3812fee-de7a-48e5-a60d-79a882aca823",
        "title_s":"皇帝讽刺剧",
        "artist_s":"鲍勃·迪伦",
        "country_s":"美国",
        "company_s":"哥伦比亚",
        "price_d":10.9,
        "year_s":"1985",
        "type_s":"光盘",
        "description_s":"夏天的午后听Bob Dylan的歌特别容易被催眠",
        "_version_":1551502047719718912,
        "score":1.0
        },
        ...
        ]
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

有一个socre的filed,所有score值为1,是因为我返回了所有数据,它们的权重都相同。

按某一filed排序

有时候,我们只关心某一字段,希望返回的数据根据这一字段排序。例如,我想查找所有书籍中比较便宜的书籍。可以使用查询参数sort=price_s asc,使用如下的HTTP查询请求:
http://localhost:8080/solr/core/select?q=*:*&sort=price_d asc

返回数据:

{
  "responseHeader":{
    "status":0,
    "QTime":0,
    "params":{
      "q":"*:*",
      "sort":"price_d asc",
      "wt":"json"}},
  "response":{"numFound":106,"start":0,"docs":[
      {
       "id":"1900599155",
        "title_s":"渡边淳一作品精选集",
        "author_s":"渡边淳一",
        "category_s":"外国小说",
        "page_i":10000,
        "price_d":12.90,
        "odertime_dt":"2015-10-02T21:47:04Z",
        "publisher_s":"不知名出版社",
        "type_s":"图书",
        "description_s":"拥有众多的读者,我倍感喜悦。",
        "_version_":1552794664615018496
        },
        ...
        ]
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

按多个filed排序

有时候,我希望返回的数据先按权重排序,再按某一filed排序,那么可以使用多个field来排序,此时按第一个排序参数排序,如果第一个参数不能区分顺序,则按第二个参数排序。对于某次查询,我希望先按权重排序,权重相同则按价格排序,那么,查询参数可以为sort=score desc, price asc

含有函数的排序

有时候,排序规则可能需要两个filed的值做数学运算。比如,有一次排序基于两个字段的和,可以使用这样的查询参数sort=sum(x_d, y_d) desc(这里的x字段和y字段都为double类型)。

posted on   宏宇  阅读(284)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示