solr+solrJ facet.pivot 用法实例

秒速五厘米 2022-08-03 03:07 248阅读 0赞

1、要实现的功能

Center

2、索引中字段

Center 1

3、solr搜索

http://****/collection1/select?q=shop_id:123&rows=1&wt=json&indent=true&facet=true&facet.pivot=p_type_name,type_name

4、solr结果

  1. {
  2. "responseHeader":{
  3. "status":0,
  4. "QTime":0,
  5. "params":{
  6. "facet":"true",
  7. "indent":"true",
  8. "q":"shop_id:123",
  9. "wt":"json",
  10. "facet.pivot":"p_type_name,type_name",
  11. "rows":"1"}},
  12. "response":{"numFound":15,"start":0,"docs":[
  13. {
  14. "add_description":" 天然美白精华液,天然水果提取的VC成分同时配合绿茶抗氧化成分,抑制黑色素生成,促进肌肤胶原蛋白的合成,预防斑点生成,亮白肤色同时收敛毛孔,让皮肤变得洁净亮白更加紧致透明,充满弹力\r\n \r\n ",
  15. "type_one":"00010",
  16. "brand_name":"It's skin 伊思",
  17. "sug":["It's skin 伊思",
  18. "精华",
  19. "itsskin 伊思10倍VC美白精华原液"],
  20. "id":"214",
  21. "share_number":0,
  22. "rank":0,
  23. "brand_thumb":"http://n.baai.com/baai/uploadfile/2015/06/26/201506261520194805.jpg",
  24. "total_num":100,
  25. "discuss_number":0,
  26. "sales":4,
  27. "p_type_name":"护肤",
  28. "name":"itsskin 伊思10倍VC美白精华原液",
  29. "name_autocomplete":"itsskin 伊思10倍VC美白精华原液",
  30. "type_three":"00011",
  31. "rebate":100,
  32. "save_number":1,
  33. "love_number":0,
  34. "shop_id":123,
  35. "brand_id":153,
  36. "code":"000100010000011",
  37. "page_view":128,
  38. "type_id":404,
  39. "type_parent":350,
  40. "price":10000,
  41. "price_c":"10000,USD",
  42. "type_name":"精华",
  43. "suggestion":"itsskin 伊思10倍VC美白精华原液",
  44. "p_id":214,
  45. "type_two":"0001000100",
  46. "thumb":"http://n.baai.com/baai/uploadfile/2015/07/18/20150718141410960.jpg",
  47. "_version_":1508018604938887168}]
  48. },
  49. "facet_counts":{
  50. "facet_queries":{},
  51. "facet_fields":{},
  52. "facet_dates":{},
  53. "facet_ranges":{},
  54. "facet_pivot":{
  55. "p_type_name,type_name":[{
  56. "field":"p_type_name",
  57. "value":"护肤",
  58. "count":13,
  59. "pivot":[{
  60. "field":"type_name",
  61. "value":"乳液",
  62. "count":2},
  63. {
  64. "field":"type_name",
  65. "value":"化妆水",
  66. "count":2},
  67. {
  68. "field":"type_name",
  69. "value":"眼霜",
  70. "count":2},
  71. {
  72. "field":"type_name",
  73. "value":"精华",
  74. "count":2},
  75. {
  76. "field":"type_name",
  77. "value":"面膜",
  78. "count":2},
  79. {
  80. "field":"type_name",
  81. "value":"面霜",
  82. "count":2},
  83. {
  84. "field":"type_name",
  85. "value":"洁面",
  86. "count":1}]},
  87. {
  88. "field":"p_type_name",
  89. "value":"彩妆",
  90. "count":2,
  91. "pivot":[{
  92. "field":"type_name",
  93. "value":"BB霜",
  94. "count":2}]}]}}}

5、solrJ实现

  1. public List<SearchType> getTypeTree(Integer type,String name) throws SolrServerException{
  2. SolrServer solrServer = SolrServerManger.getInstance();
  3. SolrQuery sQuery = new SolrQuery();
  4. List<SearchType> types=new ArrayList<SearchType>();
  5. sQuery.setFacet(true);
  6. sQuery.add("facet.pivot", "p_type_name,type_name"); //根据这两维度来分组查询
  7. switch (type) {
  8. case 1:
  9. sQuery.setQuery("name:"+name);
  10. break;
  11. case 2:
  12. sQuery.setQuery("shop_id:"+name);
  13. break;
  14. default:
  15. sQuery.setQuery("*:*");
  16. break;
  17. }
  18. QueryResponse response = solrServer.query(sQuery);
  19. NamedList<List<PivotField>> namedList = response.getFacetPivot();
  20. if(namedList != null){
  21. List<PivotField> pivotList = null;
  22. for(int i=0;i<namedList.size();i++){
  23. pivotList = namedList.getVal(i);
  24. if(pivotList != null){
  25. for(PivotField pivot:pivotList){
  26. SearchType typeTwo=new SearchType();
  27. typeTwo.setName(pivot.getValue().toString());
  28. List<PivotField> fieldList = pivot.getPivot();
  29. if(fieldList != null){
  30. List<SearchType> typeThrees=new ArrayList<SearchType>();
  31. for(PivotField field:fieldList){
  32. SearchType typeThree=new SearchType();
  33. typeThree.setName(field.getValue().toString());
  34. typeThrees.add(typeThree);
  35. }
  36. typeTwo.setSubTypes(typeThrees);
  37. types.add(typeTwo);
  38. }
  39. }
  40. }
  41. }
  42. }
  43. return types;
  44. }

6、solrj测试代码

  1. public static void main(String [] args) throws SolrServerException{
  2. List<SearchType> types=getTypeTree(2, "123");
  3. for(SearchType t:types){
  4. System.err.println(t.getName()+"===========");
  5. for(SearchType tt:t.getSubTypes()){
  6. System.err.println(" ---"+tt.getName());
  7. }
  8. }
  9. }

7、测试结果

Center 2

发表评论

表情:
评论列表 (有 0 条评论,248人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Ngxs用法实例详解

    Ngxs简介 ngxs是angular的一个状态管理框架,可以全局的管理应用程序的所有状态。 使用的场景: 当应用程序的各个组件需要共享某些数据时 当需要

    相关 Oracle触发器用法实例详解

    一、触发器简介 触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。因此触发器不需要人为的去调用,也不能调用。然后,触发器的触发条件其实在你定义的时