枢轴(决策树) Faceting

枢轴是一个让你可以自动排序、计数、总计或平均存储在表中的数据的摘要工具。 其结果通常显示在第二个表格中用以显示摘要数据。 枢轴 faceting 让你可以根据多个字段从一个 faceting 文档中创建一个结果的摘要表。

另一种看待它的方式是查询会产生一个决策树,这时候 Solr 会告诉你 “对 facet A,其约束/计数为 X/N,Y/M等。若你约束 A 和 X,则对 B 的约束计数将是 S/P,T/Q等..”。 或者说,它会进一步告诉你当你从当前 facet 结果应用约束时,对某个字段 “下”一个 facet 结果将会是什么。

facet.pivot

facet.pivot 参数定义了用作枢轴的字段。 多个 facet.pivot 值将在响应中创建多个 “facet_pivot” 部分。 每个字段列表之间以逗号分隔。

facet.pivot.mincount

facet.pivot.mincount 参数定义了要被包含在 facet 中需要的最小的匹配文档的数量。默认为 1。

使用 bin/solr -e techproducts 示例,一个如下的查询 URL 将返回以下数据, 其中枢轴 faceting 结果可在 “facet_pivot” 部分找到:

  1. http://localhost:8983/solr/techproducts/select?q=*:*&facet.pivot=cat,popularity,inStock
  2. &facet.pivot=popularity,cat&facet=true&facet.field=cat&facet.limit=5
  3. &rows=0&wt=json&indent=true&facet.pivot.mincount=2
  1. "facet_counts":{
  2. "facet_queries":{},
  3. "facet_fields":{
  4. "cat":[
  5. "electronics",14,
  6. "currency",4,
  7. "memory",3,
  8. "connector",2,
  9. "graphics card",2]},
  10. "facet_dates":{},
  11. "facet_ranges":{},
  12. "facet_pivot":{
  13. "cat,popularity,inStock":[{
  14. "field":"cat",
  15. "value":"electronics",
  16. "count":14,
  17. "pivot":[{
  18. "field":"popularity",
  19. "value":6,
  20. "count":5,
  21. "pivot":[{
  22. "field":"inStock",
  23. "value":true,
  24. "count":5}]},
  25. ...

联合 Stats 组件和 Pivots

除了某些由其它类型的 faceting 支持的 通用本地参数外, 一个 stats 本地参数可用在 facet.pivot 上以给你希望计算的每个 Pivot 约束 (根据标签) 引用 Stats组件

下例中,两个不同(重叠)集的统计对每个 facet.pivot 结果层级进行计算。

  1. stats=true
  2. stats.field={!tag=piv1,piv2 min=true max=true}price
  3. stats.field={!tag=piv2 mean=true}popularity
  4. facet=true
  5. facet.pivot={!stats=piv1}cat,inStock
  6. facet.pivot={!stats=piv2}manu,inStock

结果:

  1. "facet_pivot":{
  2. "cat,inStock":[{
  3. "field":"cat",
  4. "value":"electronics",
  5. "count":12,
  6. "pivot":[{
  7. "field":"inStock",
  8. "value":true,
  9. "count":8,
  10. "stats":{
  11. "stats_fields":{
  12. "price":{
  13. "min":74.98999786376953,
  14. "max":399.0}}}},
  15. {
  16. "field":"inStock",
  17. "value":false,
  18. "count":4,
  19. "stats":{
  20. "stats_fields":{
  21. "price":{
  22. "min":11.5,
  23. "max":649.989990234375}}}}],
  24. "stats":{
  25. "stats_fields":{
  26. "price":{
  27. "min":11.5,
  28. "max":649.989990234375}}}},
  29. {
  30. "field":"cat",
  31. "value":"currency",
  32. "count":4,
  33. "pivot":[{
  34. "field":"inStock",
  35. "value":true,
  36. "count":4,
  37. "stats":{
  38. "stats_fields":{
  39. "price":{
  40. ...
  41. "manu,inStock":[{
  42. "field":"manu",
  43. "value":"inc",
  44. "count":8,
  45. "pivot":[{
  46. "field":"inStock",
  47. "value":true,
  48. "count":7,
  49. "stats":{
  50. "stats_fields":{
  51. "price":{
  52. "min":74.98999786376953,
  53. "max":2199.0},
  54. "popularity":{
  55. "mean":5.857142857142857}}}},
  56. {
  57. "field":"inStock",
  58. "value":false,
  59. "count":1,
  60. "stats":{
  61. "stats_fields":{
  62. "price":{
  63. "min":479.95001220703125,
  64. "max":479.95001220703125},
  65. "popularity":{
  66. "mean":7.0}}}}],
  67. ...

其它 Pivot 参数

尽管 facet.pivot.mincount 偏离了用在字段 faceting 中的 facet.mincount 参数, 很多上面描述的其他 faceting 参数可能在枢轴 faceting 中使用: