Go Module: forkããpackageãimportãå©çšããæ¹æ³
ããããããš
github.com/someone/hogeã§github.com/forked/fugaãimportããŠå©çšãããã§ãã é¢ä¿æ§ã¯ä»¥äžã§ãã

ã©ãããã
äŸ
https://github.com/elastic/cloud-sdk-goãforkããŠhttps://github.com/kotaroooo0/cloud-sdk-goã®ãªããžããªããããšããŸãã 第äžã®ãªããžããªhttps://github.com/kotaroooo0/poc-validate-onlyããhttps://github.com/kotaroooo0/cloud-sdk-goãimportããŠå©çšããããšããŸãã
æé
1.https://github.com/kotaroooo0/cloud-sdk-goã§Gitã®ã¿ã°æã¡ãããŸãã
$ git tag v1.0.0 $ git push origin v1.0.0
2.https://github.com/kotaroooo0/poc-validate-only/blob/main/go.mod#L7ã®ããã«replaceã䜿ããŸãã
module github.com/kotaroooo0/poc-validate-only go 1.21.7 require github.com/elastic/cloud-sdk-go v1.16.0 replace github.com/elastic/cloud-sdk-go v1.16.0 => github.com/kotaroooo0/cloud-sdk-go v1.0.0
ããã ãã§ç¬¬äžã®ãªããžããªhttps://github.com/kotaroooo0/poc-validate-onlyããhttps://github.com/kotaroooo0/cloud-sdk-goãå©çšã§ããŸãã
åè
https://github.com/kotaroooo0/poc-validate-onlyã§ã¯importã®éšåã¯å€æŽããå¿ èŠãªã
以äžã®ããã«æ¢åã§importããŠããgithub.com/elastic/cloud-sdk-goã¯è§ŠããªããŠãèªåã§github.com/kotaroooo0/cloud-sdk-goãimportãåç §ããŠãããŸãã
https://github.com/kotaroooo0/poc-validate-only/blob/main/main.go#L3-L15
originalã«åç §ãæ»ãæ¹æ³
以äžãæ¶ãã°ãŸãgithub.com/elastic/cloud-sdk-go ãåç §ããããã«æ»ããŸãã
replace github.com/elastic/cloud-sdk-go v1.16.0 => github.com/kotaroooo0/cloud-sdk-go v1.0.0
github.com/kotaroooo0/cloud-sdk-goã®go.modã«ã€ããŠ
以äžã®ããã«github.com/kotaroooo0/cloud-sdk-goã®go.modã¯Forkããæã®ãŸãŸå€æŽããå¿
èŠã¯ãããŸããã
moduleåã倿Žããå¿
èŠã¯ãããŸããã
https://github.com/kotaroooo0/cloud-sdk-go/blob/update-deployment-validate-only-params/go.mod
åè
SolrCloud on AWS EKSãå©çšããæ€çŽ¢åºç€ã®å°å ¥
ãSolrCloud on AWS EKSãå©çšããæ€çŽ¢åºç€ã®å°å ¥ã
— æ ªåŒäŒç€Ÿãªã¯ã«ãŒã ããŒã¿æšé²å®€ (@Recruit_Data) 2023幎11æ10æ¥
æ€çŽ¢åºç€ã®éçºäºäŸã«ã€ããŠãBlogã«ãŠã玹ä»ããŠãããŸãð»
ãã²ã芧ãã ããâšhttps://t.co/Kv8VB0iUoA#ãªã¯ã«ãŒã #æ€çŽ¢åºç€
æ€çŽ¢ã·ã¹ãã éçºã§ã®é£ãã
æ¬èšäºã¯æ å ±æ€çŽ¢ã»æ€çŽ¢æè¡ Advent Calendar 2022ã®6æ¥ç®ã®èšäºã§ãã
ã¯ããã«
æè¿ã¯ãããã¯ãã®æ€çŽ¢ã·ã¹ãã ãå šææ€çŽ¢ãšã³ãžã³ãå©çšããŠéçºããŠããŸãã éåžžã®æ©èœéçºãšåãé£ãããããã°ãæ€çŽ¢æ©èœç¬ç¹ã®é£ããããããšæããŠããŸãã æ¬èšäºã§ã¯ã以äžã®ãããããããªå Žé¢ãæ³å®ããŠã¿ãŸãã
- éåžžã®æ©èœéçºãè¡ããããã¯ãããšã®è·èœæšªæã®ããŒã X
- æ€çŽ¢æè¡ãå°éãšãæ€çŽ¢APIã®ãããªãµãã·ã¹ãã ãæäŸããããŒã Y
- ããŒã±ããã£ã¬ã¯ã¿ãŒã®ãããªããžãã¹ãµã€ã

é£ãã
é£ããã«ã¯ãç¶æ³ã«ããããŸããŸãããšæããŸãã ãŸãããããã¯ãã§ã®èª²é¡ããããã®åå ãžã®æã¡æãšããŠæ€çŽ¢æ©èœéçºããããšããã®ãå šäœåã ãšæããŸãã ãã®æ€çŽ¢æ©èœéçºã«ãããŠãããŒã XãšããŒã Yã飿ºããŠéçºããŠãããŸãã

æ¬èšäºã§ã¯4ã€ã®é£ããã«ã€ããŠè§ŠããŸãã
äœãã®ãé£ãã
- ããã¯ããŒã Yã«éãã話ã§ãæåéããã®ãŸãŸã§æ€çŽ¢ã·ã¹ãã ã¯èšèšå®è£ ããã®ãé£ãããšããããšã§ãã
æ€çŽ¢ããžãã¯ã®åŠ¥åœæ§ã瀺ãã®ãé£ãã
- ããã¯ããžãã¹ãµã€ããšã®åæåœ¢æãããŒã å ã®æ€çŽ¢ããžãã¯ã®æ¹éãæ±ºå®ããéã®åé¡ã§ããäœã/äœã£ãæ€çŽ¢ããžãã¯ã«ã€ããŠåŠ¥åœæ§ã瀺ãã®ãé£ãããæ°ããæ©èœã远å ããéã«ãªã¿ãŒã³ãæç¢ºã«ã§ãããªã¹ã¯ãåãããšãé£ããããšããããŸãã
æã¡æãã課é¡ãžã¢ãããŒãããã®ãé£ãã
- ããã¯ããžãã¹ãµã€ããšã®éçºåã®åæåœ¢æã®è©±ã§ã課é¡ããå ã«æè¡(How)ããã¹ã¿ãŒãããŠãããªã©ç¹æ®ãªããã»ã¹ãå¿ èŠã«ãªããšããããšã§ããç¹ã«æ€çŽ¢æè¡ã¯ããžãã¹ãµã€ãã«ãšã£ãŠã¯ãã©ãã¯ããã¯ã¹ã§ããããšãããããã®å¿ èŠæ§ã倧ãããšæããŸãã
è£ çãé£ãã
- ããã¯ããŒã XãšããŒã Yã®é£æºã®è©±ã§ããããããã§æ€çŽ¢ãšã³ãžã³ãžããŒã¿é£æºãAPI仿§ãããžãã¯ãã©ã¡ããæã€ã®ããéæ©èœèŠä»¶ã¯ã©ãããã®ããªã©è«ç¹ãå€ãã§ãã
| é£ãã | ãªãé£ããã®ã | å ·äœäŸ |
|---|---|---|
| äœãã®ãé£ãã | APIéçºã«å ããŠããŒã¿åæã»æ€çŽ¢ãšã³ãžã³ã«é¢ããã¹ãã«ãå¿ èŠã«ãªãããšãå€ãããããŸããããŒã¿åæã«ããå®éè©äŸ¡ãšå®æ§è©äŸ¡âæ€çŽ¢ããžãã¯æœç決ãâå®è£ ãç¹°ãè¿ãå¿ èŠãããããããžã§ã¯ãéå§æã«äœãæ€çŽ¢ããžãã¯ãæç¢ºã«æ±ºå®ã§ããªãå Žåãããããã | ElasticsearchãSolrã®ã¯ãšãªããã³ãã¬ãŒããéçšç¥èãå¿ èŠã«ãªããããããžãã¯ãå°å ¥ããããRecallã¯äžãã£ããPrecisonã¯äžãã£ãã |
| æ€çŽ¢ããžãã¯ã®åŠ¥åœæ§ã瀺ãã®ãé£ãã | æ€çŽ¢ããžãã¯ã®è©äŸ¡ãé£ããããããªãã©ã€ã³å®æ§è©äŸ¡ã»å®éè©äŸ¡ãè¡ããæçµçã«ã¯ãªã³ã©ã€ã³ABãã¹ãã§è©äŸ¡ããããšãå€ãã | æ£è§£ããŒã¿ããªãããšããã°ãã°ããå®éè©äŸ¡ãé£ããããã®äžã§ãããŒã å å€åããåæåœ¢æããŠãããªããã°ãªããªãã |
| æã¡æãã課é¡ã«ã¢ãããŒãããã®ãé£ãã | 課é¡ããæã¡æãèããã ãã§ãªããæã¡æãã解決ã§ãã課é¡ãææ¡ãããã®æã¡æãæ¬åœã«æé©ãªã®ã確ãããããã»ã¹ãå¿ èŠã«ãªããããæ€çŽ¢æè¡ã¯ããžãã¹ãµã€ãã«ã¯ãã©ãã¯ããã¯ã¹ã§ããããšããããšã³ãžãã¢ãããã®ãããªããã»ã¹ã§ææ¡ããããšãå¿ èŠã«ãªããã | ã·ããã ã»èŸæžç»é²ãå°å ¥ãããšæ€çŽ¢å質ã¯åäžãããã課é¡ãšã»ããã§ããžãã¹ãµã€ãã«ææ¡ãã課é¡è§£æ±ºææ®µãšããŠã·ããã ã»èŸæžç»é²ãæé©ã§ããããšã説æããã |
| è£ çãé£ãã | ããŒã Yã®ãããªæ€çŽ¢æ©èœãéçºããããŒã ã¯å°éæ§ã®é«ããµãã·ã¹ãã ã®éçºãæäŸãè¡ãããŒã ã§ããããšãããããã®å Žåã«ããŒã Xã®ãããªäžæ°é貫ããŠäŸ¡å€æäŸããŠããããŒã ãšã¯ããããã¯ãã«å¯Ÿããè§£å床ãéãããšãããããããã®ãããWANTèŠä»¶ãMUSTèŠä»¶ã§ãããšåéãããªãŒããŒãšã³ãžãã¢ãªã³ã°ãããããã | ããŒã Yã¯æã蟌ã¿ã§ééããåæã眮ãéå°ã«æ€çŽ¢å質(ã¯ãªãªãã£)ãé«ããããã«ã³ã¹ãã»ããªããªãŒãç ç²ã«ããããšãããã |
察ç
ããããã®é£ããã«å¯ŸããŠã®å¯Ÿçã¯ãå ·äœçãªç¶æ³ã«ããã±ãŒã¹ãã€ã±ãŒã¹ã§æ¬èšäºã§ã¯æ·±ãã¯è§ŠããŸããã ãäœãã®ãé£ãããã¯å人ã®ã¹ãã«ã¢ããã§ã©ãã«ãã§ããå Žåãããã°ãéçºããã»ã¹ã»äœå¶ã倿Žããããšã§é£ãããæžããããšãã§ãããšæããŸãã ãæ€çŽ¢ããžãã¯ã®åŠ¥åœæ§ã瀺ãã®ãé£ãããã¯ããããã¿ã€ãã³ã°ã«ããå ·äœçã«æ€çŽ¢ããžãã¯ãäœéšããŠãããããšã§ã¹ããŒã¯ãã«ããŒãããã£ãŒãããã¯ãåŸããããè©äŸ¡ããããšãã§ãããããããŸããã ãæã¡æãã課é¡ã«ã¢ãããŒãããã®ãé£ãããã¯ãçŸç¶ã®ãããã¯ãã»ã·ã¹ãã ãUXã®çè§£ãšãã®èª²é¡ãçºèŠããããã解決ã§ããæè¡ããªãããšããã®ãšããã®æè¡ã¯ãªãã®èª²é¡ã解決ãããã ãããšäž¡é¢ããæ¥é ããèããã®ã倧äºãããããŸããã ãè£ çãé£ãããã¯ãããŒã éã®è²¬åãå®çŸ©ã»å€æŽããããå¯ã«ããŒã éã§ã³ãã¥ãã±ãŒã·ã§ã³ãåãããšã§è§£æ±ºã§ãããããããŸããã
ãããã«
æœè±¡çãªããŒãã«ã€ããŠèšäºãæžããŠã¿ãããšæããã£ã¬ã³ãžããŸããããããŸãããŸãæŽçã§ããŸããã§ãã...! ã¿ãªãããæããŠããæ€çŽ¢æ©èœéçºã§ã®é£ãããããã°ãç¥ãããã§ãã
ã¡ã¢: Elasticsearchã®Force Merge
åæ
Elasticsearchã€ã³ããã¯ã¹
Elasticsearchã®ã€ã³ããã¯ã¹ã¯ä»¥äžã®æ§é ã«ãªã£ãŠãŸãã

Merge ãšã¯
ã€ã³ããã¯ã¹ã®æ§é ã§ã® Segment 㯠Immutable ãªã®ã§ãDocument ãåé€ã»æŽæ°ãããæã«ã¯ãSegment å ã®ããã¥ã¡ã³ãã¯ç©çåé€ãããè«çåé€ãããŸãã ãªã®ã§ãããŒã¿ãµã€ãºãå¢ããäžæ¹ã§ãåé€ã»æŽæ°ããã Document ãç©çåé€ã㊠Segment ãçµ±åããããŒãžåŠçã宿çã«è¡ããŸãã
éåžžã¯ã«ãŒã«ããŒã¹ã§ã¹ã±ãžã¥ãŒãªã³ã°ãããŸãã
Force Merge ãšã¯
çšé
ã»ã€ã³ããã¯ã¹ã®ãµã€ãºã®çž®å°
ã»æ€çŽ¢ããã©ãŒãã³ã¹ã®åäž
ã»æ°ããããŒã¿ã®ã€ã³ããã¯ã¹äœæã«ãããæéåæž
åè
Elasticsearchã®Named queries
ããããããš
ããã€ã ã¹ããŒã«ãŒããšããæ€çŽ¢ããŒã¯ãŒãããã£ãå Žåã«ããã€ãâãã©ã³ããã¹ããŒã«ãŒâååã«ããŽãªãšElasticsearchã§åé¡ãããã(åæãšããŠãã©ã³ãåäžèЧã®ã¯ãŒãéåãšååã«ããŽãªäžèЧã®ã¯ãŒãéåã¯ãããšãã) Elasticsearchã§åé¡ããã¡ãªããã¯ã¢ãã©ã€ã¶ã«ããè¡šèšæºããåžåã§ããç¹ã§ããNIKEãã§ãããã€ããã§ããã©ã³ããšããŠã®ããã€ãããšåé¡ã§ããã åçŽã«èãããšä»¥äžã®ãããªElasticsearchã«ä»¥äžã®ãããªã¯ãšãªãæããã€ã¡ãŒãžã
GET _search
{
"query": {
"bool": {
"should": [
{
"match": {
"field.analyzed": {
"query": "ãã€ã"
}
}
},
{
"match": {
"field.analyzed": {
"query": "ãã«ãŒããŒ"
}
}
}
]
}
}
}
課é¡
Elasticsearchããè¿åŽãããã®ã¯ããŒã¯ãŒããã¢ãã©ã€ã¶ãéã£ãŠãããããããã¥ã¡ã³ããè¿åŽãããå Žåãããã
ãã®å Žåã«ãããŒã¯ãŒããšåé¡åãã®å¯Ÿå¿ã¥ããåãããªããªãã
äŸãã°ãã¯ãŒãããã€ããã§æ€çŽ¢ããŠããã¥ã¡ã³ããNikeããè¿åŽãããŠããããã€ããããã©ã³ããNikeããšåé¡ããããšåŒã³åºãåŽã¯å€æããããšãã§ããªãã
ããã¯ãããã€ããã ãã§æ€çŽ¢ããå Žåã§ããã°åé¡å¯èœã§ããããshouldå¥ã§è€æ°ã¯ãŒãã§æ€çŽ¢ããå Žåã¯åãããªãã
ã¯ãŒãæ°ã®åæ°ã¯ãšãªãæããã°åé¡å¯èœã§ãããããã¯ããã©ãŒãã³ã¹ãè² è·ã®èгç¹ã§éå¹ççã§ããã

解決æ³
ãã®èª²é¡ã¯Named queriesã§è§£æ±ºã§ããã
Named queriesãšã¯
以äžã®ããã«shouldå¥ã§ORæ€çŽ¢ãããéã«ãã©ã®ããã¥ã¡ã³ããã©ã®ã¯ãŒãã§ãããããããElasticsearchã®ã¬ã¹ãã³ã¹ã§è¿åŽãããã
GET _search
{
"query": {
"bool": {
"should": [
{
"match": {
"field.analyzed": {
"query": "ãã€ã",
"_name": "ãã€ã"
}
}
},
{
"match": {
"field.analyzed": {
"query": "ãã«ãŒããŒ",
"_name": "ãã«ãŒããŒ"
}
}
}
]
}
}
}
Named queriesã®ä»ã®ãŠãŒã¹ã±ãŒã¹
ãã¡ãã®èšäºã§ä»ã®Named queriesã®å ·äœçãŠãŒã¹ã±ãŒã¹ã«ã€ããŠè§ŠããããŠããŸããã
Use case 1 â query debugging
Use case 2 â specific query logic
Use case 3 â diversifying search results
Use case 4 â logging
æ€çŽ¢æ¹åãžã®ãã³ããåŸãããããç¥ããŸããã詳ããã¯ãªã³ã¯å ãžïŒ
Elasticsearchã®ã¿ã€ã ã¢ãŠãèšå®
Elasticsearchã®ã¿ã€ã ã¢ãŠãèšå®ãšã¯
ElasticsearchåŽã§èšå®ããã¿ã€ã ã¢ãŠãã§ãäžå³â¡ã®æéã«å¯Ÿããã¿ã€ã ã¢ãŠãèšå®ã®ããšã

ããã¥ã¡ã³ãã«ã¯ä»¥äžã®ããã«ç€ºãããŠããŸãã ã¿ã€ã ã¢ãŠãæã¯ãšã©ãŒãè¿åŽããããã§ãªãæéå ã«èç©ãããæ€çŽ¢ãããã§çµæãè¿åŽããŸãã
A search timeout, bounding the search request to be executed within the specified time value and bail with the hits accumulated up to that point when expired. Search requests are canceled after the timeout is reached using the Search Cancellation mechanism. Defaults to no timeout. See Time units.
å éšçã«ã¯ä»¥äžã®APIã«ãããã£ã³ã»ã«ãè¡ãããŠããããã§ãã
ã¯ã©ã€ã¢ã³ãåŽã§ã¯ã¬ã¹ãã³ã¹ã¿ã€ã ã¢ãŠããã³ãã¯ã·ã§ã³ã¿ã€ã ã¢ãŠããèšå®ããããšããããŸãã å³ã§â +â¡+â¢ã§ã¿ã€ã ã¢ãŠãå€å®ããã®ãã¬ã¹ãã³ã¹ã¿ã€ã ã¢ãŠããå³ã§ã¯ç€ºããŠããªããã³ãã¯ã·ã§ã³æ¥ç¶ã§ã®ã¿ã€ã ã¢ãŠãå€å®ããã®ãã³ãã¯ã·ã§ã³ã¿ã€ã ã¢ãŠãã
ã¯ã©ã€ã¢ã³ãåŽã§ã¬ã¹ãã³ã¹ã¿ã€ã ã¢ãŠããèšå®ããŠããæã¯ããã®å€ããå°ããå€ãElasticsearchã®ã¿ã€ã ã¢ãŠãèšå®ããããšè¯ãã§ãããã æ€çŽ¢çµæãæ¬ æããã®ã蚱容ã§ãã¬ã¹ãã³ã¹ã¿ã€ã ã®99%ããŒã»ã³ã¿ã€ã«ã®æ¹åã®éãªã©ã«æçšã§ãã
Elasticsearchã®ã¿ã€ã ã¢ãŠãèšå®æ¹æ³
# request GET /twitter/_search { "timeout": "1s", // "500ms", "3s"ãšããåœ¢åŒ "query" : { "term" : { "user" : "kimchy" } } } # response { "took": 1, "timed_out": false, // ã¿ã€ã ã¢ãŠããçºçãããã©ãã "_shards":{ "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits":{ "total" : { "value": 1, "relation": "eq" }, "max_score": 1.3862944, "hits" : [ { "_index" : "twitter", "_type" : "_doc", "_id" : "0", "_score": 1.3862944, "_source" : { "user" : "kimchy", "message": "trying out Elasticsearch", "date" : "2009-11-15T14:12:12", "likes" : 0 } } ] } }
WEB+DB Press Vol.126ã§ãäœã£ãŠåŠã¶æ€çŽ¢ãšã³ãžã³ã®ããã¿ââGoã§å®è£ ïŒ èšå€§ãªæ å ±ããã©ãé«éã«æ¢ãã®ãããšããèšäºãå¯çš¿ããŸãã
ã¯ããã«
ã¿ã€ãã«ã«ããããã«ã12æ24æ¥ã«è²©å£²ãããWEB+DB Pressã«èšäºãå¯çš¿ããŸããã
å»å¹Žã®10æããããåŠç¿ã®ããã«å šææ€çŽ¢ãšã³ãžã³ãèªäœãå§ããã®ã§ããããã®ãããªæ©äŒãããã ãããšã¯å šãæ³åããŠããŸããã§ããã å»å¹Žã®ã¢ããã³ãã«ã¬ã³ããŒã®ããã°èšäºã§å šææ€çŽ¢ãšã³ãžã³èªäœã«é¢ããã¢ãŠãããããåããŠããŸããã ãã®åŸãä»å¹Žã®4æã«Go Conferenceã§ç»å£ããä»åã¯WEB+DB Pressã«å¯çš¿ããããšã«ãªããŸããã ã¢ãŠãããããã¢ãŠããããã«ã€ãªãããšããçµéšãããŸããã
èšäºã«ã€ããŠ
Goã§å šææ€çŽ¢ãšã³ãžã³ãèªäœããå 容ã«ãªã£ãŠããŸãã èšäºã®å 容ã¯Go Conferenceã§ã®ã¹ã©ã€ããå ã«ãªã£ãŠããŸãã ããã«å ããŠèšäºã§ã¯ããã®ã¹ã©ã€ãããã詳现ã«èª¬æããå¹ åºãå 容ãåãæ±ã£ãŠããŸãã
ååŠè ã®æ¹ã§ãçè§£ã§ããããã«å šææ€çŽ¢ãšã³ãžã³ã®ä»çµã¿ã®èª¬æãå€ãã«æžããŸããã ãŸããå®è£ ã«é¢ããŠãGoã§æžããŸããã Goã¯ã·ã³ãã«ãªèšèªä»æ§ã§ç¹æ®ãªææ³ãå°ãªãã®ã§ãGoã«èŠªãã¿ã®ãªãæ¹ã§ãåŠçã®å 容ãçè§£ãããããšæããŸãã
ãŸããä»åã®èªäœæ€çŽ¢ãšã³ãžã³ã§ã¯ãèšèšé¢ã»å®è£ é¢ãšãã«æé©ã§ãªãéšåãå€ããããããããŸããã ææ³ããã£ãŒãããã¯ãªã©ããã ããã°å¹žãã§ãã
æåŸã«å·çã®ãã£ã³ã¹ãããã ããŠæè¬ããŠããŸãã æè¡è©è«ç€Ÿã®æ¹ã ãããããšãããããŸããã