W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
例如:如果您在電子零售商的電子商務(wù)網(wǎng)站上搜索 “DVD”,則可能會(huì)返回 “電視和視頻”,“電影”和“計(jì)算機(jī)”三個(gè)類別,每個(gè)類別有三個(gè)結(jié)果。在這種情況下,查詢?cè)~ “DVD” 出現(xiàn)在所有三個(gè)類別中,所以 Solr 將它們組合在一起以增加用戶的相關(guān)性。
應(yīng)該優(yōu)先使用 Collapse 和 Expand
Solr 的 Collapse 和 Expand 功能較新,主要與結(jié)果分組重疊。這兩種特性都是獨(dú)一無二的,并且它們具有不同的性能特性。也就是說,在大多數(shù)情況下,“Collapse”和“Expand”優(yōu)于“結(jié)果分組(Result Grouping)”。
結(jié)果分組與分面(Faceting)是不同的。盡管它們可能在概念上是相似的,但分面將返回所有相關(guān)的結(jié)果,并允許用戶根據(jù)分面類別對(duì)結(jié)果進(jìn)行細(xì)化。例如,如果您在鞋類零售商的電子商務(wù)網(wǎng)站上搜索“鞋子”,則 Solr 將返回該查詢字詞的所有結(jié)果以及諸如“尺寸”、“顏色”、“品牌”等的可選方面。
但是,您可以將分組與分面相結(jié)合。分組的 faceting 支持 facet.field,facet.range,但目前不支持日期和支點(diǎn) faceting。facet 計(jì)數(shù)是根據(jù)第一個(gè) group.field 參數(shù)計(jì)算的,而其他group.field 參數(shù)則被忽略。
已分組的分面與沒有分組的分面不同,(sum of all facets) == (total of products with that property),如以下示例所示:
對(duì)象1
對(duì)象2
對(duì)象3
如果您要求 Solr 將這些文檔按 “product_range” 進(jìn)行分組,則組的總數(shù)量為2,但 ppm 的分面數(shù)是:62為2,65為1。
結(jié)果分組采用以下請(qǐng)求參數(shù)。任何數(shù)量的這些請(qǐng)求參數(shù)都可以包含在一個(gè)請(qǐng)求中:
如果為true
,查詢結(jié)果將被分組。
結(jié)果分組字段的名稱。該字段必須是單值的,并且要么是索引的,要么是具有值源的字段類型,并且在函數(shù)查詢中工作,例如ExternalFileField
。它也必須是基于字符串的字段,如StrField
或者TextField
根據(jù)函數(shù)查詢的唯一值進(jìn)行分組。
此選項(xiàng)不適用于分布式搜索。
返回與給定查詢匹配的一組文檔。
要返回的組的數(shù)量。默認(rèn)值是10
。
指定組列表的初始偏移量。
指定每個(gè)組返回的結(jié)果數(shù)量。默認(rèn)值是1
。
指定每個(gè)組的文檔列表的初始偏移量。
指定 Solr 如何對(duì)各組進(jìn)行相對(duì)排序。例如:sort=popularity desc
將導(dǎo)致組按照每個(gè)組中最高的受歡迎度文檔進(jìn)行排序。默認(rèn)值是score desc
。
指定 Solr 如何對(duì)每個(gè)組中的文檔進(jìn)行排序。如果group.sort
未指定,則默認(rèn)行為是使用與sort
參數(shù)相同的有效值。
如果將此參數(shù)設(shè)置為simple
,則分組的文檔將顯示在單個(gè)平面列表中,start
和rows
參數(shù)會(huì)影響文檔數(shù)量而不是組數(shù)量。這個(gè)參數(shù)的另一個(gè)值是grouped
。
如果為true
,則將第一個(gè)字段分組命令的結(jié)果被用作響應(yīng)中的主要結(jié)果列表,使用group.format=simple
。
如果為true
,則 Solr 包含結(jié)果中與查詢匹配的組數(shù)。默認(rèn)值是 false。
使用分片索引時(shí),請(qǐng)參閱下面的“分布式結(jié)果分組注意事項(xiàng)”。
如果為true
,則 facet 計(jì)數(shù)基于與查詢匹配的每個(gè)組的最相關(guān)文檔。默認(rèn)值是false
。
確定是否為在 facet.field 參數(shù)中指定的字段分面計(jì)算分組的分面。根據(jù)第一個(gè)指定的組計(jì)算分組的分面。和正常的字段分面一樣,字段不應(yīng)該被標(biāo)記(否則計(jì)算每個(gè)標(biāo)記的計(jì)數(shù))。分組的分面支持單個(gè)和多值字段。默認(rèn)是false
。
這個(gè)選項(xiàng)可能會(huì)有很高的性能成本。
使用分片索引時(shí),請(qǐng)參閱下面的“分布式結(jié)果分組注意事項(xiàng)”。
如果將此參數(shù)設(shè)置為大于0的數(shù)字,則可以對(duì)結(jié)果分組進(jìn)行緩存。結(jié)果分組執(zhí)行兩次搜索;這個(gè)選項(xiàng)緩存第二個(gè)搜索。默認(rèn)值是0
,最大值是100
。
測(cè)試表明,組緩存僅通過布爾、通配符和模糊查詢來提高搜索時(shí)間。對(duì)于像術(shù)語或“全部匹配”查詢這樣的簡(jiǎn)單查詢,組緩存會(huì)降低性能。
任何數(shù)量的組命令(例如,group.field,group.func,group.query,等等)可以在單個(gè)請(qǐng)求中指定。
以下所有示例查詢均適用于 Solr 的 “bin / solr -e techproducts” 示例。
在此示例中,我們將根據(jù) manu_exact 字段對(duì)結(jié)果進(jìn)行分組,該字段指定樣本數(shù)據(jù)集中項(xiàng)目的制造商。
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)"}]
}
}]}}}
響應(yīng)表明我們的查詢總共有六個(gè)匹配項(xiàng)。對(duì)于 group.field 的五個(gè)唯一值中的每一個(gè),Solr 返回一個(gè) groupValue 的 docList,使得 numFound 指示在該組中的文件的總數(shù),并根據(jù)隱式默認(rèn) group.limit=1 和 group.sort=score desc 參數(shù)返回頂級(jí)文檔。然后根據(jù)隱式 sort=score desc,按照每個(gè)組內(nèi)頂部文檔的得分對(duì)結(jié)果組進(jìn)行排序,返回的組數(shù)限于隱式 rows=10。
我們可以使用請(qǐng)求參數(shù) group.main=true 運(yùn)行相同的查詢。這將把結(jié)果格式化為一個(gè)單一的文檔列表。這種平面格式不包含像正常結(jié)果分組查詢結(jié)果那樣多的信息 - 特別是每個(gè)組中的 numFound - 但是現(xiàn)有的 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)"}]
}
}
在這個(gè)例子中,我們將使用這個(gè) group.query 參數(shù)在兩個(gè)不同的價(jià)格范圍內(nèi)找到 “memory” 的前三個(gè)結(jié)果: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 找到了五個(gè)“memory”匹配,但只返回四個(gè)按價(jià)格分組的結(jié)果。這是因?yàn)椤癿emory”的一個(gè)結(jié)果沒有分配給它的價(jià)格。
分布式搜索支持分組,但是有一些注意事項(xiàng):
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: