99re热视频这里只精品,久久久天堂国产精品女人,国产av一区二区三区,久久久精品成人免费看片,99久久精品免费看国产一区二区三区

Solr查詢如何實現結果分組

2018-11-30 15:03 更新
Solr 結果分組將具有公共字段值的文檔組分組,并返回每個組的頂部文檔。 

例如:如果您在電子零售商的電子商務網站上搜索 “DVD”,則可能會返回 “電視和視頻”,“電影”和“計算機”三個類別,每個類別有三個結果。在這種情況下,查詢詞 “DVD” 出現在所有三個類別中,所以 Solr 將它們組合在一起以增加用戶的相關性。

應該優(yōu)先使用 Collapse 和 Expand

Solr 的 Collapse 和 Expand 功能較新,主要與結果分組重疊。這兩種特性都是獨一無二的,并且它們具有不同的性能特性。也就是說,在大多數情況下,“Collapse”和“Expand”優(yōu)于“結果分組(Result Grouping)”。

結果分組與分面(Faceting)是不同的。盡管它們可能在概念上是相似的,但分面將返回所有相關的結果,并允許用戶根據分面類別對結果進行細化。例如,如果您在鞋類零售商的電子商務網站上搜索“鞋子”,則 Solr 將返回該查詢字詞的所有結果以及諸如“尺寸”、“顏色”、“品牌”等的可選方面。

但是,您可以將分組與分面相結合。分組的 faceting 支持 facet.field,facet.range,但目前不支持日期和支點 faceting。facet 計數是根據第一個 group.field 參數計算的,而其他group.field 參數則被忽略。

已分組的分面與沒有分組的分面不同,(sum of all facets) == (total of products with that property),如以下示例所示:

對象1

  • name:Phaser 4620a
  • ppm:62
  • product_range:6

對象2

  • name:Phaser 4620i
  • ppm:65
  • product_range:6

對象3

  • name:ML6512
  • ppm:62
  • product_range:7

如果您要求 Solr 將這些文檔按 “product_range” 進行分組,則組的總數量為2,但 ppm 的分面數是:62為2,65為1。

分組參數

結果分組采用以下請求參數。任何數量的這些請求參數都可以包含在一個請求中:

group 參數

如果為true,查詢結果將被分組。

group.field 參數

結果分組字段的名稱。該字段必須是單值的,并且要么是索引的,要么是具有值源的字段類型,并且在函數查詢中工作,例如ExternalFileField。它也必須是基于字符串的字段,如StrField或者TextField

group.func 參數

根據函數查詢的唯一值進行分組。

此選項不適用于分布式搜索。

group.query 參數

返回與給定查詢匹配的一組文檔。

rows 參數

要返回的組的數量。默認值是10

start 參數

指定組列表的初始偏移量。

group.limit 參數

指定每個組返回的結果數量。默認值是1。

group.offset 參數

指定每個組的文檔列表的初始偏移量。

sort 參數

指定 Solr 如何對各組進行相對排序。例如:sort=popularity desc將導致組按照每個組中最高的受歡迎度文檔進行排序。默認值是score desc。

group.sort 參數

指定 Solr 如何對每個組中的文檔進行排序。如果group.sort未指定,則默認行為是使用與sort參數相同的有效值。

group.format 參數

如果將此參數設置為simple,則分組的文檔將顯示在單個平面列表中,startrows參數會影響文檔數量而不是組數量。這個參數的另一個值是grouped。

group.main 參數

如果為true,則將第一個字段分組命令的結果被用作響應中的主要結果列表,使用group.format=simple

group.ngroups 參數

如果為true,則 Solr 包含結果中與查詢匹配的組數。默認值是 false。

使用分片索引時,請參閱下面的“分布式結果分組注意事項”。

group.truncate 參數

如果為true,則 facet 計數基于與查詢匹配的每個組的最相關文檔。默認值是false。

group.facet 參數

確定是否為在 facet.field 參數中指定的字段分面計算分組的分面。根據第一個指定的組計算分組的分面。和正常的字段分面一樣,字段不應該被標記(否則計算每個標記的計數)。分組的分面支持單個和多值字段。默認是false

這個選項可能會有很高的性能成本。

使用分片索引時,請參閱下面的“分布式結果分組注意事項”。

group.cache.percent 參數

如果將此參數設置為大于0的數字,則可以對結果分組進行緩存。結果分組執(zhí)行兩次搜索;這個選項緩存第二個搜索。默認值是0,最大值是100。

測試表明,組緩存僅通過布爾、通配符和模糊查詢來提高搜索時間。對于像術語或“全部匹配”查詢這樣的簡單查詢,組緩存會降低性能。

任何數量的組命令(例如,group.field,group.func,group.query,等等)可以在單個請求中指定。

分組示例

以下所有示例查詢均適用于 Solr 的 “bin / solr -e techproducts” 示例。

按字段進行結果分組

在此示例中,我們將根據 manu_exact 字段對結果進行分組,該字段指定樣本數據集中項目的制造商。

http://localhost:8983/solr/techproducts/select?fl=id,name&q=solr+memory&group=true&group.field=manu_exact
{
"..."
"grouped":{
  "manu_exact":{
    "matches":6,
    "groups":[{
        "groupValue":"Apache Software Foundation",
        "doclist":{"numFound":1,"start":0,"docs":[
            {
              "id":"SOLR1000",
              "name":"Solr, the Enterprise Search Server"}]
        }},
      {
        "groupValue":"Corsair Microsystems Inc.",
        "doclist":{"numFound":2,"start":0,"docs":[
            {
              "id":"VS1GB400C3",
              "name":"CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail"}]
        }},
      {
        "groupValue":"A-DATA Technology Inc.",
        "doclist":{"numFound":1,"start":0,"docs":[
            {
              "id":"VDBDB1A16",
              "name":"A-DATA V-Series 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - OEM"}]
        }},
      {
        "groupValue":"Canon Inc.",
        "doclist":{"numFound":1,"start":0,"docs":[
            {
              "id":"0579B002",
              "name":"Canon PIXMA MP500 All-In-One Photo Printer"}]
        }},
      {
        "groupValue":"ASUS Computer Inc.",
        "doclist":{"numFound":1,"start":0,"docs":[
            {
              "id":"EN7800GTX/2DHTV/256M",
              "name":"ASUS Extreme N7800GTX/2DHTV (256 MB)"}]
        }
      }]}}}

響應表明我們的查詢總共有六個匹配項。對于 group.field 的五個唯一值中的每一個,Solr 返回一個 groupValue 的 docList,使得 numFound 指示在該組中的文件的總數,并根據隱式默認 group.limit=1 和 group.sort=score desc 參數返回頂級文檔。然后根據隱式 sort=score desc,按照每個組內頂部文檔的得分對結果組進行排序,返回的組數限于隱式 rows=10。

我們可以使用請求參數 group.main=true 運行相同的查詢。這將把結果格式化為一個單一的文檔列表。這種平面格式不包含像正常結果分組查詢結果那樣多的信息 - 特別是每個組中的 numFound - 但是現有的 Solr 客戶端可能更容易解析。

http://localhost:8983/solr/techproducts/select?fl=id,name,manufacturer&q=solr+memory&group=true&group.field=manu_exact&group.main=true
{
  "responseHeader":{
    "status":0,
    "QTime":1,
    "params":{
      "fl":"id,name,manufacturer",
      "indent":"true",
      "q":"solr memory",
      "group.field":"manu_exact",
      "group.main":"true",
      "group":"true"}},
  "grouped":{},
  "response":{"numFound":6,"start":0,"docs":[
      {
        "id":"SOLR1000",
        "name":"Solr, the Enterprise Search Server"},
      {
        "id":"VS1GB400C3",
        "name":"CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail"},
      {
        "id":"VDBDB1A16",
        "name":"A-DATA V-Series 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - OEM"},
      {
        "id":"0579B002",
        "name":"Canon PIXMA MP500 All-In-One Photo Printer"},
      {
        "id":"EN7800GTX/2DHTV/256M",
        "name":"ASUS Extreme N7800GTX/2DHTV (256 MB)"}]
  }
}

按查詢分組

在這個例子中,我們將使用這個 group.query 參數在兩個不同的價格范圍內找到 “memory” 的前三個結果:0.00 到 99.99,以及超過100。

http://localhost:8983/solr/techproducts/select?indent=true&fl=name,price&q=memory&group=true&group.query=price:0+TO+99.99&group.query=price:[100+TO+*]&group.limit=3
{
  "responseHeader":{
    "status":0,
    "QTime":42,
    "params":{
      "fl":"name,price",
      "indent":"true",
      "q":"memory",
      "group.limit":"3",
      "group.query":["price:[0 TO 99.99]",
      "price:[100 TO *]"],
      "group":"true"}},
  "grouped":{
    "price:[0 TO 99.99]":{
      "matches":5,
      "doclist":{"numFound":1,"start":0,"docs":[
          {
            "name":"CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail",
            "price":74.99}]
      }},
    "price:[100 TO *]":{
      "matches":5,
      "doclist":{"numFound":3,"start":0,"docs":[
          {
            "name":"CORSAIR  XMS 2GB (2 x 1GB) 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) Dual Channel Kit System Memory - Retail",
            "price":185.0},
          {
            "name":"Canon PIXMA MP500 All-In-One Photo Printer",
            "price":179.99},
          {
            "name":"ASUS Extreme N7800GTX/2DHTV (256 MB)",
            "price":479.95}]
      }
    }
  }
}

在這種情況下,Solr 找到了五個“memory”匹配,但只返回四個按價格分組的結果。這是因為“memory”的一個結果沒有分配給它的價格。

分布式結果分組警告

分布式搜索支持分組,但是有一些注意事項:

  • 目前 group.func 在任何分布式搜索中都不支持
  • group.ngroups 和 group.facet 要求每個組中的所有文檔必須共同位于同一分片上,以便返回準確的計數。在許多情況下,通過組合鍵進行文件路由可能是有用的解決方案
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號