zoukankan      html  css  js  c++  java
  • Solr查询参数sort(排序)

    摘要: 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
            },
            ...
            ]
        }
    }

    有一个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
            },
            ...
            ]
        }
    }

    按多个filed排序

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

    含有函数的排序

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

  • 相关阅读:
    谈谈系统
    快速发展的Swift是否将淘汰Objective-C?
    XCode环境变量及路径设置
    Windows server2008 搭建ASP接口访问连接oracle数据库全过程记录--备用
    Swift2.0新特性--文章过时重置
    【XCode7+iOS9】http网路连接请求、MKPinAnnotationView自定义图片和BitCode相关错误--备用
    移动App双周版本迭代策略
    ti8168平台的tiler memory
    图像处理之二维码生成-qr
    大数据之网络爬虫-一个简单的多线程爬虫
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/9522003.html
Copyright © 2011-2022 走看看