ã©ããªå 容ã§ãã
ãªã³ã©ã€ã³ã¹ãã¢ã§ãã¡ã»ããæ€çŽ¢ãè¡ãæ¹æ³ã¯ïŒãã¡ã»ããæ€çŽ¢ãã£ã«ã¿ãŒã§å€ã¯ã©ã®ããã«çæãããŸããïŒãã£ã«ã¿ã§å€ãéžæãããšã飿¥ãããã£ã«ã¿ã®å€ã«ã©ã®ããã«åœ±é¿ããŸããïŒçããæ¢ããŠãGoogleæ€çŽ¢çµæã®5ããŒãžç®ã«å°éããŸãããç¶²çŸ çãªæ å ±ã¯èŠã€ãããŸããã§ãããèªåã§çè§£ããå¿ èŠããããŸãããèšäºã®èª¬æïŒ
- ãŠãŒã¶ãŒããã£ã«ã¿ãŒã䜿çšãããšãã«UIãã©ã®ããã«åå¿ãããã
- ãã£ã«ã¿å€ãçæããããã®ã¢ã«ãŽãªãºã ã
- ElasticSearchã¯ãšãªãã³ãã¬ãŒããšèª¬æä»ãã®ã€ã³ããã¯ã¹æ§é ã
ããã«ã¯æ¢è£œã®ãœãªã¥ãŒã·ã§ã³ã¯ãããŸãããã³ããŒïŒããŒã¹ãã¯ã§ããŸãããããªãèªèº«ã®åé¡ã解決ããããã«ãããªãã¯æãäžããªããã°ãªããŸããã

æç¢ºã«ããããã®æŠå¿µ
å šææ€çŽ¢-åèªãŸãã¯ãã¬ãŒãºã§è£œåãæ€çŽ¢ããŸãããŠãŒã¶ãŒã«ãšã£ãŠãããã¯ãæ€çŽ¢ããã¿ã³ã§ããã¹ããå ¥åããããã®ãã£ãŒã«ãã§ããããµã€ãã®ä»»æã®ããŒãžã§äœ¿çšã§ããŸãã
ãã¡ã»ããæ€çŽ¢-è²ããµã€ãºãã¡ã¢ãªãµã€ãºãäŸ¡æ Œãªã©ãããã€ãã®ç¹æ§ã§è£œåãæ€çŽ¢ããŸãããŠãŒã¶ãŒã«ãšã£ãŠãããã¯äžé£ã®ãã£ã«ã¿ãŒã§ããåãã£ã«ã¿ãŒã¯1ã€ã®ç¹æ§ã®ã¿ã«é¢é£ä»ããããŠããããã®éãåæ§ã§ãããã£ã«ã¿å€ã¯ãç¹æ§ã«å¯ŸããŠå¯èœãªãã¹ãŠã®å€ã§ãããŠãŒã¶ãŒã«ã¯ããã«ããã¹ãæ€çŽ¢çµæã®ããããŒãžã®ã»ã¯ã·ã§ã³ããŒãžãã«ããŽãªã«ãã£ã«ã¿ãŒã衚瀺ãããŸãããŠãŒã¶ãŒãå€ãéžæãããšããã£ã«ã¿ãŒã¯ã¢ã¯ãã£ãã§ãããšèŠãªãããŸãã
ãã¡ã»ãããã£ã«ã¿ãŒã®åäœ
ã€ãŸãããã£ã«ã¿ãŒã¯è£œåããã£ã«ã¿ãŒããä»ã®ãã£ã«ã¿ãŒã®éžæãªãã·ã§ã³ããã£ã«ã¿ãŒããŸãã
補åããã£ã«ã¿ãªã³ã°ããŸã
ããã§ç°¡åã§ããéžæãããŠãŒã¶ãŒïŒ
- 1ã€ã®å€ãå€ã«äžèŽãã補åã衚瀺ããŸãã
- 1ã€ã®ãã£ã«ã¿ãŒã«è€æ°ã®å€ããããå°ãªããšã1ã€ã«äžèŽãã補åã確èªããŸãã
- ããã€ãã®ãã£ã«ã¿ãŒã®å€ã¯ãåãã£ã«ã¿ãŒã®å€ãšäžèŽãã補åã確èªããŸãã
ããŒã«ä»£æ°ã®èгç¹ããïŒãã£ã«ã¿ãŒéã«è«çãANDããããããã£ã«ã¿ãŒå ã®å€éã«è«çãORãããããŸããã·ã³ãã«ãªããžãã¯ã
ä»ã®ãã£ã«ã¿ãŒã®ãã£ã«ã¿ãŒã®éžæè¢
ããŸã...ã©ã®ãªãã·ã§ã³ããããŸãã-衚瀺ãããäœãé ãããŠããŸããã-ããã¯ãããžãã¹ããã£ã«ã¿ãŒã®åäœã説æããæ¹æ³ã§ããè«ççã«èãããŸããå®éã«ã¯ã次ã®ããã«æ©èœããŸãã
- é»è©±ã®ã»ã¯ã·ã§ã³ã«ç§»åãããšããã©ã³ãã察è§ç·ãã¡ã¢ãªãªã©ã®ç¹æ§ã«ãããã£ã«ã¿ã衚瀺ãããŸããåãã£ã«ã¿ãŒã«ã¯å€ãå«ãŸããŠããŸãã
- . . 1.
- . , . , 2.
- . . , 3.
- «» . 3 ..
ãã£ã«ã¿å€ã®æ°ã¯ã補åã®æ°ã«ãã£ãŠç°ãªããŸããç°ãªãç¹æ§å€ãæã€è£œåãå€ãã»ã©ããã£ã«ã¿å ã®å€ãå€ããªããŸãããŠãŒã¶ãŒã¯ããã©ã³ããéžæãããšãã«ãæ®ãã®ãã£ã«ã¿ãŒã®éžæã§è£œåã®æ°ãæžãããŸãããããã«ãããå€ã®ãªã¹ããæŽæ°ãããŸããã
ããã«ãããæ®éçãªã«ãŒã«ãçãŸããŸãïŒãã£ã«ã¿ãŒå€ã¯ãæ®ãã®ã¢ã¯ãã£ããªãã£ã«ã¿ãŒã«ãã£ãŠåœ¢æããã補åã®éžæããååŸãããŸãã
åã¢ã¯ãã£ããã£ã«ã¿ãŒã«ã¯ãç¬èªã®è£œåã®éžæè¢ããããŸãã
Nåã®ãã£ã«ã¿ãŒããããæ¬¡ã®å ŽåïŒ
- ã¢ã¯ãã£ãã§ãªãå Žåããµã³ãã«ã¯äžè¬çã§ããããã¯ãã¹ãŠã®ãã£ã«ã¿ãŒã§åãã§ãããæ€çŽ¢çµæãšäžèŽããŸãã
- Mãã¢ã¯ãã£ãã§ãM <Nã®å Žåããµã³ãã«æ°ã¯M + 1ã§ããããã§ã1ã¯ããã¹ãŠã®ã¢ã¯ãã£ããã£ã«ã¿ãŒãé©çšããããµã³ãã«ã§ããããã¯ãã¹ãŠã®éã¢ã¯ãã£ããªãã£ã«ã¿ãŒã§åãã§ãããæ€çŽ¢çµæãšäžèŽããŸãã
- ã¢ã¯ãã£ãMãN = Mã®å Žåããµã³ãã«æ°ã¯Nã§ããåãã£ã«ã¿ãŒã«ã¯ç¬èªã®ãµã³ãã«ããããŸãã
æçµçã«ããŠãŒã¶ãŒããã¡ã»ãããã£ã«ã¿ãŒå€ãéžæãããšã次ã®ããã«ãªããŸãã
- ååã®æ€çŽ¢éžæã圢æãããŸãã
- éã¢ã¯ãã£ããªãã£ã«ã¿ãŒã®å€ã¯ãæ€çŽ¢éžæããååŸãããŸãã
- ã¢ã¯ãã£ããªãã£ã«ã¿ãŒããšã«ãæ°ãããµã³ãã«ã圢æãããã¢ã¯ãã£ããªãã£ã«ã¿ãŒã®æ°ããå€ãããããæœåºãããŸãã
çåãçããŸã-ãããå®éã«ã©ã®ããã«å®è£ ããã®ã§ããïŒ
ElasticsearchïŒESïŒã®å®è£
補åã®ç¹æ§ã¯æ®éçã§ã¯ãªãããã補åãæ¢è£œã®ã¯ãšãªãä¿åããããã®æ¢è£œã®ã€ã³ããã¯ã¹æ§é ã¯ããã«ã¯ãããŸããã代ããã«ããæ£ãããã€ã³ããã¯ã¹ãšã¯ãšãªãèªåã§äœæããæ¹æ³ã説æããããã¥ã¡ã³ããžã®ãªã³ã¯ããããŸãããæ£ããã-ç§ã®çµéšãšç¥èã«åºã¥ããŠããŸãã
ãæ£ãããã¿ã€ãã®ããã¹ãããã¯ã¹
ESã§ã¯ã次ã®2ã€ã®ããŒã¿ã¿ã€ãã«é¢å¿ããããŸãã
- å šææ€çŽ¢çšã®ããã¹ãããã®ã¿ã€ãã®ãã£ãŒã«ãã¯ãæ£ç¢ºãªæ¯èŒãäžŠã¹æ¿ããéèšã«ã¯äœ¿çšã§ããŸããã
- æ£ç¢ºãªæ¯èŒãäžŠã¹æ¿ããéèšã®æäœã«é¢ä¿ããæååã®ããŒã¯ãŒãã
ESã¯ããã¹ããã£ãŒã«ãã®å€ãè§£æãããã«ããã¹ãæ€çŽ¢çšã®èŸæžãäœæããŸããããŒã¯ãŒããã£ãŒã«ãã®å€ã¯ãåä¿¡ãããã®ãšããŠã€ã³ããã¯ã¹ä»ããããŸããéèšãšäžŠã¹æ¿ãã¯ãããŒã¯ãŒããã£ãŒã«ãã§ã®ã¿äœ¿çšã§ããŸãã
ãŠãŒã¶ãŒã¯ããã«ããã¹ãæ€çŽ¢ãšãã£ã«ã¿ãŒã®äž¡æ¹ã®å Žåã«ç¹æ§ã䜿çšããŸããESã§ã¯ã1ã€ã®ãã£ãŒã«ãã«2ã€ã®ã¿ã€ããå²ãåœãŠãããšã¯ã§ããŸããããä»ã®ãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã
ãã£ãŒã«ã
PUT my_index
{
«mappings»: {
«properties»: {
«some_property»: {
«type»: «text», // 1
«fields»: { // 2
«raw»: {
«type»: «keyword»
}
}
}
}
}
}
- 補åã®ç¹æ§ãããã¹ãã¿ã€ãã®ãã£ãŒã«ããšããŠå®£èšã ãŸãã
- fieldsãã©ã¡ãŒã¿ã䜿çšããŠãkeywordã¿ã€ãã®åä»®æ³ãã£ãŒã«ããäœæããŸããä»®æ³ã補åã®èª¬æã§ã¯ãªãã€ã³ããã¯ã¹ã«ååšãããããESã¯ãåä¿¡ããããŒã¿ãåãã£ãŒã«ãã«èªåçã«ä¿åããŸãã
ãããã£ãŠããã¹ãŠã®ç¹æ§ã«ã€ããŠã
æ£ç¢ºãªæ¯èŒãäžŠã¹æ¿ããããã³éèšæäœã®ã¯ãšãªã§ã¯ãããŒã¯ãŒãã¿ã€ãã®åä»®æ³ãã£ãŒã«ãã䜿çšããå¿ èŠããããŸãããã®äŸã§ã¯ãããã¯some_property.rawã§ããããã¹ãæ€çŽ¢ã®å Žå-芪ã
copy_toã
PUT my_index
{
«mappings»: {
«properties»: {
«all_properties»: { // 1
«type»: «text»
}, «some_property_1»: {
«type»: «keyword»,
«copy_to»: «all_properties» // 2
},
«some_property_2»: {
«type»: «keyword»,
«copy_to»: «all_properties»
}
}
}
- ã€ã³ããã¯ã¹ã«ããã¹ãã¿ã€ãã®ä»®æ³ãã£ãŒã«ããäœæããŸãã
- copy_toãã©ã¡ãŒã¿ãŒã䜿çšããŠãåç¹æ§ãããŒã¯ãŒããšããŠå®£èšã ãŸãããã©ã¡ãŒã¿å€ã§ä»®æ³ãã£ãŒã«ããæå®ããŸããESã¯ãããã¥ã¡ã³ããä¿åããããšãã«ããã¹ãŠã®ç¹æ§ã®å€ãä»®æ³ãã£ãŒã«ãã«ã³ããŒããŸãã
æ£ç¢ºãªæ¯èŒãäžŠã¹æ¿ããéèšã®æäœã«ã¯ãããã¹ãæ€çŽ¢çšã®ç¹æ§ãã£ãŒã«ãïŒãã¹ãŠã®ç¹æ§ã®å€ãæã€ãã£ãŒã«ãïŒã䜿çšããå¿ èŠããããŸãã
ã©ã¡ãã®ã¢ãããŒãã§ããå ã®ããã¥ã¡ã³ãæ§é ã«ã¯ååšããªã远å ã®ãã£ãŒã«ããã€ã³ããã¯ã¹ã«äœæãããŸãããããã£ãŠãã¯ãšãªãäœæããã«ã¯ãã€ã³ããã¯ã¹ã®æ§é ãç¥ãå¿ èŠããããŸããcopy_to
ãªãã·ã§ã³ã奜ãã§ããæ¬¡ã«ããã«ããã¹ãæ€çŽ¢ã¯ãšãªãäœæããã«ã¯ããã¹ãŠã®ç¹æ§ã®å€ã®ã³ããŒãå«ã1ã€ã®ãã£ãŒã«ããç¥ã£ãŠããã ãã§ååã§ãã
ãåãåãã
補åãæ€çŽ¢ããã«ã¯
ã€ã³ããã¯ã¹æ§é ã¯copy_toããªã¢ã³ããšåãã§ãããšæ³å®ããŸããESã§ã®å šææ€çŽ¢ã§ã¯ããã¡ã»ãããã£ã«ã¿ãŒã®å€ãšæ¯èŒããããã«äžèŽæ§é ã䜿çšãããŸã-çšèªã¯ãšãªã booleanã¯ãšãªã¯ãæ§æã1ã€ã®ã¯ãšãªã«çµåããŸããæ¬¡ã®ããã«ãªããŸãã
{
«query» : {
«bool»: {
«must»: {
«match»: {
«virtual_field_for_fulltext_searching»: {
«query»: «some text»
}
}
},
«filter»: {
«must»: [
{«property_1»: [ «value_1_1», âŠ, «value_1_n»]},
âŠ
{«property_n»: [ «value_n_1», âŠ, «value_n_m»]}
]
}
}
}
}
query.bool.must.matchã¡ã€ã³å šææ€çŽ¢
ã¯ãšãªquery.bool.filterãã£ã«ã¿ãŒã䜿çšããŠãã¡ã€ã³ã¯ãšãªãçµã蟌ã¿ãŸããå åŽã§ãªããã°ãªããªããšããããšã¯ããã£ã«ã¿ãŒéã®è«ççãªãandããæå³ããŸããåãã£ã«ã¿ãŒã®å€ã®é åã¯ããŒã«å€ãŸãã¯ã§ãã
ãã£ã«ã¿å€ã®å Žå
çšèªã¯ãå¥åéç¹æ§å€ã«ãã£ãŠã°ã«ãŒãã®è£œåããåã°ã«ãŒãå ã®éãç®åºããŸãããã®æäœã¯éçŽãšåŒã°ããŸããé£ããã®ã¯ãã¢ã¯ãã£ããªãã£ã«ã¿ãŒããšã« ãä»ã®ã¢ã¯ãã£ããªãã£ã«ã¿ãŒã«ãã£ãŠåœ¢æãããååã®éžæã«å¯ŸããŠéèšãšããçšèªãå®è¡ããå¿ èŠãããããšã§ããéã¢ã¯ãã£ããªãã£ã«ã¿ãŒã®å Žå-æ€çŽ¢çµæã«äžèŽããéžæç¯å²ããã£ã«ã¿éçŽæ§é ã䜿çšãããšãéçŽããšã«åå¥ã®éžæãäœæããæäœã1ã€ã®ã¯ãšãªã«ãããã¯ãã§ããŸãã
ãªã¯ãšã¹ãã®æ§é ã¯æ¬¡ã®ããã«ãªããŸãã
{
«size»: 0,
«query» : {
«bool»: {
«must»: {
«match»: {
«field_for_fulltext_searching»: {
«fuzziness»: 2,
«query»: «some text»
}
}
},
«filter»: {
}
}
},
«aggs» : {
«inavtive_filter_agg» : {
«filter» : { âŠ
},
«aggs»: {
«some_inavtive_filter_subagg»: {
«terms» : {
«field» : «some_property»
}
},
...
«some_other_inavtive_filter_subagg»: {
«terms» : {
«field» : «some_other_property»
}
}
}
},
«active_filter_1_agg» : {
«filter»: {
⊠},
«aggs»: {
«active_filter_1_subagg»: {
«terms» : {
«field»: «property_1»
}
}
}
},
âŠ,
«active_filter_N_agg» : {
«filter»: {
âŠ
},
«aggs»: {
«active_filter_N_subagg»: {
«terms» : {
«field»: «property_N»
}
}
}
}
}
}
query.bool-ã¡ã€ã³ã¯ãšãªããã£ã«ã¿ãªã³ã°æäœã¯ãã®ã³ã³ããã¹ãã§å®è¡ãããŸããæ§æïŒ
- äžèŽ-å šææ€çŽ¢ã®èŠæ±ã
- ãã£ã«ã¿-ãã¡ã»ãããã£ã«ã¿ã«é¢é£ããããµãã»ããã«ååšããå¿ èŠãããç¹æ§ã«ãããã£ã«ã¿ãåšåº«ã®ãã補åã®ã¿ããŸãã¯è¡šç€ºãããŠãã補åã®ã¿ãåžžã«è¡šç€ºããå Žåã¯ããããin_stockãis_visibleã«ãããã£ã«ã¿ãŒã«ããããšãã§ããŸãã
aggs.inavtive_filter_agg-éã¢ã¯ãã£ããªãã¡ã»ãããã£ã«ã¿ãŒã®éèšã¯ã次ã®ãã®ã§æ§æãããŸãã
- ãã£ã«ã¿- ã¢ã¯ãã£ããã¡ã»ãããã£ã«ã¿ã«ãã£ãŠåœ¢æãããç¹æ§ã«ãã£ãŠæ¡ä»¶ãã¡ã€ã³ã¯ãšãªãšãšãã«ãååã®éžæã圢æããããã®ã»ã¯ã·ã§ã³ã®åéèšãå®è¡ãããŸãã
- aggsã¯ãéã¢ã¯ãã£ããªåãã£ã«ã¿ãŒã®ååä»ãéèšãªããžã§ã¯ãã§ãã
aggs.active_filter_1_agg-æåã®ã¢ã¯ãã£ããªãã¡ã»ãããã£ã«ã¿ãŒã®å€ãååŸããããã®éèšãåãã¶ã€ã³ã¯ã1ã€ã®ãã¡ã»ãããã£ã«ã¿ãŒã«é¢é£ä»ããããŠããŸããæ§æïŒ
- ãã£ã«ã¿-çŸåšã®ãé€ããŠãã¢ã¯ãã£ããã¡ã»ãããã£ã«ã¿ã«ãã£ãŠåœ¢æãããç¹æ§ã«ãã£ãŠæ¡ä»¶ãã¡ã€ã³ã¯ãšãªãšãšãã«ããã®ã»ã¯ã·ã§ã³ã®åéèšãå®è¡ãããååã®éžæã圢æããŸãã
- aggs-çŸåšã¢ã¯ãã£ããªãã¡ã»ãããã£ã«ã¿ãŒã®ç¹æ§ã«å¿ããã1ã€ã®éèšããã®ãªããžã§ã¯ãã
ããµã€ãºãïŒ0 ãæå®ããããšãéèŠã§ããæå®ããªããšãéèšãªãã§ã¡ã€ã³ã¯ãšãªã«äžèŽãã補åã®ãªã¹ãã衚瀺ãããŸãã
æçµçã«ã¯
2ã€ã®ãªã¯ãšã¹ããåãåããŸããïŒ
- æ€çŽ¢çµæã®å ŽåããŠãŒã¶ãŒã«è¡šç€ºãã補åãè¿ããŸãã
- ãã£ã«ã¿å€ã®å Žåãéèšãå®è¡ãããã£ã«ã¿å€ãšãã®å€ãæã€è£œåã®æ°ãè¿ããŸãã
åãªã¯ãšã¹ãã¯èªå·±å®çµåã§ãããããéåæã§å®è¡ããããšããå§ãããŸãã
PSãã¡ã»ããæ€çŽ¢ã®åé¡ã解決ããããã®ãããæ£ãããã¢ãããŒããšããŒã«ãããããšãèªããŸããã³ã¡ã³ãã®è¿œå æ å ±ãšäŸãããã ããã°å¹žãã§ãã