簡體   English   中英

分組結果為SOLR?

[英]Grouping results in SOLR?

我有一個 Solr 索引,其架構如下所示:

{
  "responseHeader": {
    "status": 0,
    "QTime": 0,
    "params": {
      "q": "*:*",
      "q.op": "OR",
      "_": "1673422604341"
    }
  },
  "response": {
    "numFound": 1206,
    "start": 0,
    "numFoundExact": true,
    "docs": [
      {
        "material_name_s":"MaterialName1",
        "company_name_s": "CompanyName1",
        "price_per_lb_value_f": 1.11,
        "received_date_dt": "2015-01-01T00:00:00Z"
      },
      {
        "material_name_s":"MaterialName1",
        "company_name_s": "CompanyName2",
        "price_per_lb_value_f": 2.22,
        "received_date_dt": "2020-01-01T00:00:00Z"
      },
      {
        "material_name_s":"MaterialName1",
        "company_name_s": "CompanyName3",
        "price_per_lb_value_f": 3.33,
        "received_date_dt": "2021-01-01T00:00:00Z"
      },
      {
        "material_name_s":"MaterialName2",
        "company_name_s": "CompanyName1",
        "price_per_lb_value_f": 4.44,
        "received_date_dt": "2016-01-01T00:00:00Z"
      },
      {
        "material_name_s":"MaterialName2",
        "company_name_s": "CompanyName2",
        "price_per_lb_value_f": 5.55,
        "received_date_dt": "2021-01-01T00:00:00Z"
      },
      {
        "material_name_s":"MaterialName2",
        "company_name_s": "CompanyName3",
        "price_per_lb_value_f": 6.66,
        "received_date_dt": "2022-01-01T00:00:00Z"
      }
    ]
  }
}

這些是來自不同公司的不同材料的歷史價格。

我想獲得過去 2 年中每種material_name_s的最低price_per_lb_value_f ,因此結果如下所示:

{
  "response": {
    "numFound": 2,
    "start": 0,
    "numFoundExact": true,
    "docs": [
      {
        "material_name_s":"MaterialName1",
        "company_name_s": "CompanyName3",
        "price_per_lb_value_f": 3.33,
        "received_date_dt": "2021-01-01T00:00:00Z"
      },
      {
        "material_name_s":"MaterialName2",
        "company_name_s": "CompanyName2",
        "price_per_lb_value_f": 5.55,
        "received_date_dt": "2021-01-01T00:00:00Z"
      }
    ]
  }
}

這種分組甚至可以用 Solr 做嗎? 我是 Solr 的新手,如有任何幫助,我們將不勝感激。

Solr 可以進行分組。您可以通過以下查詢獲得您想要的結果:

  1. 字段折疊方法(在您的情況下推薦)https://solr.apache.org/guide/solr/latest/query-guide/collapse-and-expand-results.html
http://localhost:8983/solr/test/select?indent=true&q.op=OR&q=received_date_dt:[NOW-3YEAR%20TO%20*]&fq={!collapse%20field=material_name_s%20min=price_per_lb_value_f}

q:received_date_dt:[NOW-3YEAR TO *] // 范圍查詢以僅過濾過去 3 年收到的文件,否則我不會在 2021-01-01 收到文件
fq:{!collapse field=material_name_s min=price_per_lb_value_f} // 它只顯示所有文檔中具有相同material_name_s值的一個文檔。 它獲取具有最小price_per_lb_value_f的文檔

  1. 分組方法https://solr.apache.org/guide/solr/latest/query-guide/result-grouping.html
http://localhost:8983/solr/test/select?indent=true&q.op=OR&q=received_date_dt:[NOW-3YEAR%20TO%20*]&group=true&group.field=material_name_s&group.sort=price_per_lb_value_f%20asc

q:received_date_dt:[NOW-3YEAR TO *] // 與之前相同的過濾器
group:true // 啟用分組
group.field:material_name_s // 按material_name_s分組
group.sort:price_per_lb_value_f asc // 按字段price_per_lb_value_f升序排列每個組
group.limit未指定,默認值為 1 // 它設置每個組的結果數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM