ãã®èšäºã¯ äžäŒ.comã¢ããã³ãã«ã¬ã³ããŒ2017 ã®6æ¥ç®ã§ãã äžäŒ.comã¬ã¹ãã©ã³ æ€çŽ¢ã»é客æ
åœã®ã«ãããã§ãã äžäŒ.comãäžäŒ.comã¬ã¹ãã©ã³ãšãã«ãæ€çŽ¢ã«ã¯äž»ã« Solr ãå©çšããŠããŸãã (äžéšãRDBã§æ€çŽ¢ããŠãããšããããããŸã) RDB(SQL)ããŒã¹ã§ã®æ€çŽ¢ãšæ¯ã¹ããšè²ã
ãšã¡ãªããããããŸããããã®äžã§ããã¡ã»ããããã²ãŒã·ã§ã³ã«å¿
èŠãªæ©èœãæã£ãŠããã®ã¯å€§ããªé
åãšèšããã§ãããã ãã¡ã»ããäŸ Solr5.xããã¯ãæ§æ¥ã®ãã¡ã»ãããšã¯ç°ãªãJSON Facetãšããæ©èœãæ°ãã«æäŸãããŠãããç¹ã«åé¡(åŸè¿°ã® 泚æç¹ ãåç
§)ãç¡ãã®ã§ããã°ããã¡ãã®ã»ããå©çšããããã§ãããã ããããJSON Facetã¯Solrã®ãµã€ãäžã§ã¯èšåããªãã éçºè
ã®ãµã€ã ãããã¥ã¡ã³ãã«ãªã£ãŠããç¶æ³ã®ããããããŸãã¡ãã€ããŒãªååšã«çãŸã£ãŠããããã«æããŸãã ãã®ãšã³ããªã§ã¯ JSON Facetã«ã€ããŠãæ§æ¥ã®ãã¡ã»ãããšã®æ¯èŒãæ··ããªãããåºæ¬çãªäœ¿ãæ¹ãå¿çšäŸã泚æç¹ã«ã€ããŠç޹ä»ããŸãã ãªããæ¬ãšã³ããªã§å©çšããŠããããŒãžã§ã³ã¯ãšã³ããªäœææç¹ã®ææ°çã7.1.0ãåæãšããŠããŸãã åºæ¬çãªäœ¿ãæ¹ ã¬ã¹ãã©ã³ãç»é²ãã ikyu-advent-2017-restaurant ã³ã¢ã«å¯Ÿãã以äžã®ãããªããŒã¿ãå
¥ã£ãŠãããšããŸã ã¬ã¹ãã©ã³ID (restaurant_id) ã¬ã¹ãã©ã³å (restaurant_name) ãžã£ã³ã«1 (genres) ãµããžã£ã³ã«1 (sub_genres) ãžã£ã³ã«2 (genres) ãµããžã£ã³ã«2 (sub_genres) éœéåºç (prefecture) åžåºçºæ (city) 11 AAAA æŽé£ æŽé£-ãã¬ã³ã æ±äº¬éœ é座 12 BBBB åé£ åé£-京æç åé£ åé£-æç³æç æ±äº¬éœ èµ€å 13 CCCC æŽé£ æŽé£-ã¹ããŒãã»ã°ãªã«æç æŽé£ æŽé£-ã€ã¿ãªã¢æç æ±äº¬éœ é座 14 DDDD ãã®ä» ãã®ä»-ã©ãŠã³ãž ãã®ä» ãã®ä»-ãããã§ æ±äº¬éœ åå· 15 EEEE åé£ åé£-å¯¿åž æ±äº¬éœ é座 16 FFFF åé£ åé£-å¯¿åž åé£ åé£-倩ã·ã æ±äº¬éœ é座 17 GGGG ãã®ä» ãã®ä»-ã©ãŠã³ãž åé£ åé£-å¯¿åž ç¥å¥å·ç æšªæµ â» ä»¥äž3ç¹ã«çæ éœéåºç - åžåºçºæã¯èŠªåé¢ä¿ã§ããããš ãžã£ã³ã« - ãµããžã£ã³ã«ã芪åé¢ä¿ã§ããããš ããã«ããžã£ã³ã«-ãµããžã£ã³ã«ã¯ãããã2ã€ç»é²å¯èœã§ããããš (MultiValueã«ããŠãã) 詊ãã«ããã®ããŒã¿ãå
¥ã£ãç¶æ
ã®ã¯ãšãªãå®è¡ããŠã¿ãŸããã http://localhost:8983/solr/ikyu-advent-2017-restaurant/select?echoParams=none&q=*:*&fl=restaurant_id,restaurant_name,genres,sub_genres,prefecture,city&rows=2 çµæ { " responseHeader ": { " status ": 0 , " QTime ": 0 } , " response ": { " numFound ": 7 , " start ": 0 , " docs ": [{ " restaurant_id ": " 11 ", " restaurant_name ": " AAAA ", " genres ": [ " æŽé£ " ] , " sub_genres ": [ " æŽé£-ãã¬ã³ã " ] , " prefecture ": " æ±äº¬éœ ", " city ": " é座 " } , { " restaurant_id ": " 12 ", " restaurant_name ": " BBBB ", " genres ": [ " åé£ ", " åé£ " ] , " sub_genres ": [ " åé£-京æç ", " åé£-æç³æç " ] , " prefecture ": " æ±äº¬éœ ", " city ": " èµ€å " }] } } ããŒã¿ãååŸã§ããŸããããžã£ã³ã«ããµããžã£ã³ã«ã¯é
åã§è¿åŽãããŠããŸãã åŸæ¥ã®ãã¡ã»ãããå®è¡ ãã®ããŒã¿ã«å¯ŸããŠãåŸæ¥ã®æ¹æ³ã§ãã¡ã»ãããååŸããŠã¿ãŸãããã ååŸå¯Ÿè±¡ã¯ãžã£ã³ã«ããµããžã£ã³ã«ãéœéåºçãåžåºçºæã®4ã€ã§ãã (åé·ã«ãªãããã¬ã¹ãã©ã³äžèЧã®ååŸã¯æå¶) ã¯ãšãª http://localhost:8983/solr/ikyu-advent-2017-restaurant/select?echoParams=none&q=*:*&rows=0&facet=true&facet.field=prefecture&facet.field=city&facet.field=genres&facet.field=sub_genres çµæ { " responseHeader ": { " status ": 0 , " QTime ": 0 } , " response ": { " numFound ": 7 , " start ": 0 , " docs ": [] } , " facet_counts ": { " facet_queries ": {} , " facet_fields ": { " prefecture ": [ " æ±äº¬éœ ", 6 , " ç¥å¥å·ç ", 1 ] , " city ": [ " é座 ", 4 , " åå· ", 1 , " æšªæµ ", 1 , " èµ€å ", 1 ] , " genres ": [ " åé£ ", 4 , " ãã®ä» ", 2 , " æŽé£ ", 2 ] , " sub_genres ": [ " åé£-å¯¿åž ", 3 , " ãã®ä»-ã©ãŠã³ãž ", 2 , " ãã®ä»-ãããã§ ", 1 , " åé£-京æç ", 1 , " åé£-倩ã·ã ", 1 , " åé£-æç³æç ", 1 , " æŽé£-ã€ã¿ãªã¢æç ", 1 , " æŽé£-ã¹ããŒãã»ã°ãªã«æç ", 1 , " æŽé£-ãã¬ã³ã ", 1 ] } , " facet_ranges ": {} , " facet_intervals ": {} , " facet_heatmaps ": {} } } ååŸã§ããŠããã®ã¯è¯ãã®ã§ããã倧ãã2ã€ã®åé¡ããããŸãã "prefecture":["æ±äº¬éœ", 6,"ç¥å¥å·ç", 1] ã®ããã«ã1ã€ã®é
åã«å¯Ÿã㊠key1, value1, key2, value2 ... ãšããå
¥ãæ¹ãããŠãããããåŠçããã«ãã æ¬æ¥èŠªåé¢ä¿ã§ããã¹ããéœéåºçãšåžåºçºæã®èŠªåé¢ä¿ã倿ã§ããªã ãã®ãã¡2ã«ã€ããŠã¯ãžã£ã³ã«-ãµããžã£ã³ã«ã®ããã«åéå±€ã«èŠªéå±€ã®æ
å ±ãä»äžããŠãããããšã§åé¿å¯èœã§ããã1ã«ã€ããŠã¯ææ
¢ãããããããŸããã ããããJSON Facetãªããã®äž¡æ¹ã解決ã§ããŸãã JSON Facetãå®è¡ ã¯ãšãª http://localhost:8983/solr/ikyu-advent-2017-restaurant/select?echoParams=none&q=*:*&rows=0&json.facet={prefecture:{type:terms,field:prefecture,limit:-1,facet:{city:{type:terms,field:city,limit: -1}}}}&json.facet={genres:{type:terms,field:genres,limit:-1,facet:{sub_genres:{type:terms,field:sub_genres}}}} â» éœéåºç/åžåºçºæã®ãã¡ã»ããæå®ãèŠãããå å·¥ãããšä»¥äžã®éã json . facet = { prefecture : { /* ã¬ã¹ãã³ã¹æã®é
ç®å(ä»»æ) */ type : terms , /* ãã¡ã»ããã®åäœãå€ã« */ field : prefecture , /* ãã¡ã»ããã®å¯Ÿè±¡ãšãªãé
ç®(éœéåºç) */ limit : -1 , /* å
šä»¶ååŸ */ facet : { city : { /* ããããåéå±€ */ type : terms , field : city , /* ãã¡ã»ããã®å¯Ÿè±¡ãšãªãé
ç®(åžåºçºæ) */ limit : -1 } } } } çµæ { " responseHeader ": { " status ": 0 , " QTime ": 9 } , " response ": { " numFound ": 7 ," start ": 0 ," docs ": [] } , " facets ": { " count ": 7 , " prefecture ": { " buckets ": [{ " val ":" æ±äº¬éœ ", " count ": 6 , " city ": { " buckets ": [ { " val ":" é座 ", " count ": 4 } , { " val ":" åå· ", " count ": 1 } , { " val ":" èµ€å ", " count ": 1 }]}} , { " val ":" ç¥å¥å·ç ", " count ": 1 , " city ": { " buckets ": [{ " val ":" æšªæµ ", " count ": 1 }]}}]} , " genres ": { " buckets ": [{ " val ":" åé£ ", " count ": 4 , " sub_genres ": { " buckets ": [ { " val ":" åé£-å¯¿åž ", " count ": 3 } , { " val ":" ãã®ä»-ã©ãŠã³ãž ", " count ": 1 } , { " val ":" åé£-京æç ", " count ": 1 } , { " val ":" åé£-倩ã·ã ", " count ": 1 } , { " val ":" åé£-æç³æç ", " count ": 1 }]}} /* *** ã 以äžç¥ ã *** */ ]}}} ã芧ã®éãã {"val":key, "count":value}ã®çµã¿åããã§è¡šçŸãããŠããããåŠçããããã éœéåºçãšåžåºçºæã®èŠªåé¢ä¿ã衚çŸã§ããŠãã ãšãèŠäºã«åè¿°ã®åé¡ã解決ã§ããŠããŸãã ãã ãããžã£ã³ã« - ãµããžã£ã³ã«ã®èŠªåé¢ä¿ã«ã€ããŠã¯ããåé£ãã®äžã«ããã®ä»ããæ··åšãããšãããæåŸ
ãšã¯è£è
¹ãªç¶æ
ã«ãªã£ãŠããŸãã æ®å¿µãªããããã¡ãã¯èŠªåé¢ä¿ã®èŠªãMultiValueã«ãªã£ãŠããéãåé¿ã¯ã§ããŸããã åŸæ¥ã®ãã¡ã»ããåæ§åå¥ã«ãã¡ã»ããã®æå®ãè¡ããã¢ããªã±ãŒã·ã§ã³åŽã§èŠªåé¢ä¿ãåŠçããä»ç¡ãããã§ãã å¿çšäŸ ãšããã§ãäžäŒ.comã¬ã¹ãã©ã³ã¯ã¬ã¹ãã©ã³ã®ããã©ã³ããäºçŽãããµã€ãã§ãã ã€ãŸããäºçŽæ€çŽ¢ã§è¡šç€ºãããäžèЧã¯ãã¬ã¹ãã©ã³ãåäœã§ãããå®éã«æ€çŽ¢ããŠããããŒã¿ã¯ãã©ã³åäœã§ãã ãã®ãããããŒã¿ãã¬ã¹ãã©ã³ã§ã¯ãªããã©ã³ã軞ã«ãªããŸãã (å®éã«ã¯æŽã«æ¥ä»ãæéã人æ°ãåžã®æç¡ãšãã£ã軞ãèæ
®ããå¿
èŠããããŸãããè€éã«ãªãããããã§ã¯å²æããŸã) ikyu-advent-2017-plan ã³ã¢ã®ããŒã¿ id ã¬ã¹ãã©ã³ID (restaurant_id) ã¬ã¹ãã©ã³å (restaurant_name) ãžã£ã³ã«1 (genre) ãµããžã£ã³ã«1 (sub_genre) ãžã£ã³ã«2 (genre) ãµããžã£ã³ã«2 (sub_genre) éœéåºç (prefecture) åžåºçºæ (city) ãã©ã³ID (plan_id) ãã©ã³å (plan_name) æé垯 (time) äŸ¡æ Œ (price) å宀 (private_room) 倿¯ç¢ºå® (nightview) é£²ã¿æŸé¡ (free_flow) 11-1101 11 AAAA æŽé£ æŽé£-ãã¬ã³ã æ±äº¬éœ é座 1101 ã¯ãªã¹ãã¹ãã£ã㌠ãã£ã㌠8000 1 1 0 11-1102 11 AAAA æŽé£ æŽé£-ãã¬ã³ã æ±äº¬éœ é座 1102 ã¯ãªã¹ãã¹ã©ã³ã ã©ã³ã 4000 1 0 0 11-1103 11 AAAA æŽé£ æŽé£-ãã¬ã³ã æ±äº¬éœ é座 1103 ã¢ãã¿ããŒã³ãã£ãŒ ã©ã³ã 2500 0 0 0 11-1104 11 AAAA æŽé£ æŽé£-ãã¬ã³ã æ±äº¬éœ é座 1104 å¹³æ¥éå®ã¹ããŒã¯ãªã³ã°é£²ã¿æŸé¡! ãã£ã㌠4000 0 0 1 12-1201 12 BBBB åé£ åé£-京æç åé£ åé£-æç³æç æ±äº¬éœ èµ€å 1201 ãã°ãããã®ã»ãã ã©ã³ã 3000 0 0 0 12-1202 12 BBBB åé£ åé£-京æç åé£ åé£-æç³æç æ±äº¬éœ èµ€å 1202 ããŸããã³ãŒã¹ ãã£ã㌠7000 1 0 0 12-1203 12 BBBB åé£ åé£-京æç åé£ åé£-æç³æç æ±äº¬éœ èµ€å 1203 ããŸããã³ãŒã¹é£²ã¿æŸé¡ä» ãã£ã㌠9000 1 0 1 13-1301 13 CCCC æŽé£ æŽé£-ã¹ããŒãã»ã°ãªã«æç æŽé£ æŽé£-ã€ã¿ãªã¢æç æ±äº¬éœ é座 1301 ãã¯ã³ããªã³ã¯ä»ãããªãã£ã¯ã¹ã©ã³ã ã©ã³ã 3000 0 0 0 13-1302 13 CCCC æŽé£ æŽé£-ã¹ããŒãã»ã°ãªã«æç æŽé£ æŽé£-ã€ã¿ãªã¢æç æ±äº¬éœ é座 1302 極äžã®çè§çã¹ããŒã300ã°ã©ã ! ã©ã³ã 4000 0 0 0 13-1303 13 CCCC æŽé£ æŽé£-ã¹ããŒãã»ã°ãªã«æç æŽé£ æŽé£-ã€ã¿ãªã¢æç æ±äº¬éœ é座 1303 ãé£²ã¿æŸé¡ä»ããéžã¹ããã¹ã¿ã»ã¹ããŒããå«ã6çš®ã®ãã£ã㌠ãã£ã㌠8000 1 0 0 13-1304 13 CCCC æŽé£ æŽé£-ã¹ããŒãã»ã°ãªã«æç æŽé£ æŽé£-ã€ã¿ãªã¢æç æ±äº¬éœ é座 1304 ãXmasã也æ¯ã·ã£ã³ãã³ä»ïŒäžå·çã®æ¥µäžã¹ããŒããšãã¶ãŒãã®ã»ãã ãã£ã㌠3000 0 0 0 14-1401 14 DDDD ãã®ä» ãã®ä»-ã©ãŠã³ãž ãã®ä» ãã®ä»-ãããã§ æ±äº¬éœ åå· 1401 ãããã§ã©ã³ã ã©ã³ã 2000 0 0 0 14-1402 14 DDDD ãã®ä» ãã®ä»-ã©ãŠã³ãž ãã®ä» ãã®ä»-ãããã§ æ±äº¬éœ åå· 1402 ãå¿å¹ŽäŒã«ãããã!!ã50çš®é¡ãã奜ãã«éžã¹ããã£ããŒãããã§ïŒ ãã£ã㌠5000 0 1 1 15-1501 15 EEEE åé£ åé£-å¯¿åž æ±äº¬éœ é座 1501 æ¡ã10貫 ãã£ã㌠7000 1 0 0 15-1502 15 EEEE åé£ åé£-å¯¿åž æ±äº¬éœ é座 1502 æ¡ã8貫ããé ããçŒãç©ä»ã ãã£ã㌠8500 1 0 0 16-1601 16 FFFF åé£ åé£-å¯¿åž åé£ åé£-倩ã·ã æ±äº¬éœ é座 1601 æ¡ããšå€©ã·ãã®ã³ãŒã¹ ãã£ã㌠5000 0 0 1 16-1602 16 FFFF åé£ åé£-å¯¿åž åé£ åé£-倩ã·ã æ±äº¬éœ é座 1602 æ¡ãã®ã³ãŒã¹ ãã£ã㌠4500 0 0 1 17-1701 17 GGGG ãã®ä» ãã®ä»-ã©ãŠã³ãž åé£ åé£-å¯¿åž ç¥å¥å·ç æšªæµ 1701 ã倿¯ç¢ºå®ãã¯ãªã¹ãã¹ãã£ã㌠ãã£ã㌠9000 0 1 0 17-1702 17 GGGG ãã®ä» ãã®ä»-ã©ãŠã³ãž åé£ åé£-å¯¿åž ç¥å¥å·ç æšªæµ 1702 ã¯ãªã¹ãã¹ãã£ã㌠ãã£ã㌠7000 1 0 0 17-1703 17 GGGG ãã®ä» ãã®ä»-ã©ãŠã³ãž åé£ åé£-å¯¿åž ç¥å¥å·ç æšªæµ 1703 å¹³æ¥éå®ãã£ã㌠ãã£ã㌠5000 0 0 1 ãã®ããŒã¿ã«å¯ŸããŠãéœéåºçãåžåºçºæã®JSON Facetãå®è¡ããŠã¿ãŸããã JSON Facetãå®è¡ ã¯ãšãª http://localhost:8983/solr/ikyu-advent-2017-plan/select?echoParams=none&q=*:*&rows=0&json.facet={prefecture:{type:terms,field:prefecture,limit:-1,facet:{city:{type:terms,field:city}}}} çµæ { " responseHeader ": { " status ": 0 , " QTime ": 0 } , " response ": { " numFound ": 20 ," start ": 0 ," docs ": [] } , " facets ": { " count ": 20 , " prefecture ": { " buckets ": [{ " val ":" æ±äº¬éœ ", " count ": 17 , " city ": { " buckets ": [{ " val ":" é座 ", " count ": 12 } , { " val ":" èµ€å ", " count ": 3 } , { " val ":" åå· ", " count ": 2 }]}} , { " val ":" ç¥å¥å·ç ", " count ": 3 , " city ": { " buckets ": [{ " val ":" æšªæµ ", " count ": 3 }]}}]}}} ããã¯ãããŸããã1è¡ã®åäœããã©ã³ã«ãªã£ãé¢ä¿ã§ããã¡ã»ããã®æ°ãããã©ã³ã®æ°ãã«ãªã£ãŠããŸããŸããã Result Groupingã䜿ãããŒã¿ãã¬ã¹ãã©ã³åäœã§è¡šçŸããããã«ããŸããã &group=true&group.field=restaurant_id&group.ngroups=true&group.truncate=true â» Result Groupingã«ã€ããŠã¯æ¬çš¿ã®äž»æšãšã¯ç°ãªããã説æã¯å²æããŸãã ãšã¡ã©ã«ãã¢ãªãããã¯ããã®ãšã³ã㪠ããªã¹ã¹ã¡ Result Grouping + JSON Facetãå®è¡ ã¯ãšãª http://localhost:8983/solr/ikyu-advent-2017-plan/select?echoParams=none&q=*:*&rows=0&json.facet={prefecture:{type:terms,field:prefecture,limit:-1,facet:{city:{type:terms,field:city}}}}&group=true&group.field=restaurant_id&group.truncate=true&group.ngroups=true group.truncate=trueã§ãã¡ã»ãããã°ã«ãŒãã³ã°ã®åäœã§è¿åŽãgroup.ngroups=true ã§ã°ã«ãŒãåäœã®æ€çޢ件æ°ãè¿åŽã«ãªããŸãã çµæ { " responseHeader ": { " status ": 0 , " QTime ": 1 } , " grouped ": { " restaurant_id ": { " matches ": 20 , " ngroups ": 7 , " groups ": []}} , " facets ": { " count ": 7 , " prefecture ": { " buckets ": [{ " val ":" æ±äº¬éœ ", " count ": 6 , " city ": { " buckets ": [{ " val ":" é座 ", " count ": 4 } , { " val ":" åå· ", " count ": 1 } , { " val ":" èµ€å ", " count ": 1 }]}} , { " val ":" ç¥å¥å·ç ", " count ": 1 , " city ": { " buckets ": [{ " val ":" æšªæµ ", " count ": 1 }]}}]}}} ç¡äºããã¡ã»ããã®ä»¶æ°ãã¬ã¹ãã©ã³åäœã«ãªããŸããã ãã©ã³ã®æ
å ±ãJSON Facetã§ååŸ ã°ã«ãŒãã³ã°ã¯ãã®ãŸãŸã«ããã©ã³ã®æ
å ±ã§ãã倿¯ç¢ºå®ããã¡ã»ããã§ååŸããŠã¿ãŸã ã¯ãšãª http://localhost:8983/solr/ikyu-advent-2017-plan/select?echoParams=none&q=*:*&rows=0&json.facet={nightview:{type:terms,field:nightview,limit:-1}}}&group=true&group.field=restaurant_id&group.truncate=true&group.ngroups=true çµæ { " responseHeader ": { " status ": 0 , " QTime ": 5 } , " grouped ": { " restaurant_id ": { " matches ": 20 , " ngroups ": 7 , " groups ": []}} , " facets ": { " count ": 7 , " private_room ": { " buckets ": [{ " val ": false , " count ": 5 } , { " val ": true , " count ": 2 }]}}} 倿¯ç¢ºå®ã¯ãã©ã³æ¯ã«ç°ãªãæ
å ±ã§ããã«ãé¢ããããã¬ã¹ãã©ã³ã®æ°ãè¿ã£ãŠããŸããŸããããã®ãããªã±ãŒã¹ã§ã¯ &group.truncate=true ã§ã¯ç¡çãããããã§ãã ã¬ã¹ãã©ã³åäœã®Result Groupingã«ãã©ã³ã®ãã¡ã»ãããææã©ãã远å ããæ¹æ³ ã¯ãšãª http://localhost:8983/solr/ikyu-advent-2017-plan/select?echoParams=none&q=*:*&rows=0&group=true&group.field=restaurant_id&json.facet={prefecture:{type:terms,field:prefecture,limit:-1,facet:{restaurant_count:"unique(restaurant_id)"},city:{type:terms,field:city,facet:{restaurant_count:"unique(restaurant_id)"}}}}}&json.facet={nightview:{type:terms,field:nightview,limit:-1,facet:{restaurant_count:"unique(restaurant_id)"}}}}&group.ngroups=true &group.truncate=true ãå€ãã restaurant_count: "unique(restaurant_id)" ã远å ããŠããŸããrestaurant_id ã§ãŠããŒã¯ãåã£ãæ°ãrestaurant_countãšããŠè¿åŽãããããšããçå±ã§ãã çµæ { " responseHeader ": { " status ": 0 , " QTime ": 3 } , " grouped ": { " restaurant_id ": { " matches ": 20 , " ngroups ": 7 , " groups ": []}} , " facets ": { " count ": 20 , " prefecture ": { " buckets ": [{ " val ":" æ±äº¬éœ ", " count ": 17 , " restaurant_count ": 6 } , { " val ":" ç¥å¥å·ç ", " count ": 3 , " restaurant_count ": 1 }]} , " nightview ": { " buckets ": [{ " val ": false , " count ": 17 , " restaurant_count ": 7 } , { " val ": true , " count ": 3 , " restaurant_count ": 3 }]}}} ããã§ãéœéåºç / åžåºçºæã¯ã¬ã¹ãã©ã³ã®æ°ã倿¯ç¢ºå®ã¯true / falseããããã«ã該åœãããã©ã³ãæã£ãŠããã¬ã¹ãã©ã³ã®æ°ããè¿åŽãããŸããã æ³šæç¹ å€ã®ä¿¡é Œæ§ã«ã€ããŠ å Žåã«ãã£ãŠã¯å€§ããªåé¡ãæãå¯èœæ§ããããŸãã Solrã®JSON Facetã¯å¿
ãããæ£ç¢ºãªã«ãŠã³ãæ°ãè¿ããªã ãã ããShardingãããŠããªããããã¯åé¡ãªãã¯ãã§ãã æ©èœã®å®å®æ§ã«ã€ã㊠å
¬åŒã«èšåãç¡ãæ©èœã®ããå®å®æ§ãæ°ã«ãªããšããã§ãããã幞ããå°å
¥ããŠãã1幎ã»ã©å®å®çšŒåããŠããŸã ããã㫠以äžãããŸãã¡ãã€ããŒïŒãªJSON Facetã«ã€ããŠã®ç޹ä»ã§ããã æåŸã«å®£äŒã§ãã ã¯ãªã¹ãã¹ã®ãåºã決ãå
ŒããŠããæ¹ãåçªã«å¿å¹ŽäŒã®å¹¹äºã«æåãããŠããŸã£ãæ¹ãæ¯éãäžäŒ.comã¬ã¹ãã©ã³ã§äºçŽããŠãã ããããŸã éã«åããŸãïŒ restaurant.ikyu.com restaurant.ikyu.com ææ¥ã¯ ohke ããã«ãã GoãšSQL Server ã§ãã