🤖

🤖

:gijutsu_burogu:

Go Module: forkしたpackageをimportし利用する方法

Go

やりたいこと github.com/someone/hogeでgithub.com/forked/fugaをimportして利用したいです。 関係性は以下です。 どうやるか 例 https://github.com/elastic/cloud-sdk-goをforkしてhttps://github.com/kotaroooo0/cloud-sdk-goのリポジトリがあるとします…

SolrCloud on AWS EKSを利用した検索基盤の導入

【SolrCloud on AWS EKSを利用した検索基盤の導入】検索基盤の開発事例について、Blogにてご紹介しております💻ぜひご覧ください✨https://t.co/Kv8VB0iUoA#リクルート #検索基盤— 株式会社リクルート データ推進室 (@Recruit_Data) 2023年11月10日 blog.recrui…

検索システム開発での難しさ

本記事は情報検索・検索技術 Advent Calendar 2022の6日目の記事です。 はじめに 最近はプロダクトの検索システムを全文検索エンジンを利用して開発しています。 通常の機能開発と同じ難しさもあれば、検索機能独特の難しさもあると感じています。 本記事で…

メモ: ElasticsearchのForce Merge

前提 Elasticsearchインデックス Elasticsearchのインデックスは以下の構造になってます。 Elasticsearchのインデックス構造 Merge とは インデックスの構造での Segment は Immutable なので、Document が削除・更新された時には、Segment 内のドキュメント…

ElasticsearchのNamed queries

やりたいこと 「ナイキ スニーカー」という検索キーワードがあった場合に、ナイキ→ブランド、スニーカー→商品カテゴリとElasticsearchで分類したい。(前提としてブランド名一覧のワード集合と商品カテゴリ一覧のワード集合はあるとする) Elasticsearchで分類…

Elasticsearchのタイムアウト設定

Elasticsearchのタイムアウト設定とは Elasticsearch側で設定するタイムアウトで、下図②の時間に対するタイムアウト設定のこと。 ドキュメントには以下のように示されています。 タイムアウト時はエラーを返却するわけでなく時間内に蓄積された検索ヒットで…

WEB+DB Press Vol.126で「作って学ぶ検索エンジンのしくみ──Goで実装! 膨大な情報からどう高速に探すのか」という記事を寄稿しました

はじめに タイトルにあるように、12月24日に販売されたWEB+DB Pressに記事を寄稿しました。 gihyo.jp 去年の10月ごろから学習のために全文検索エンジンを自作し始めたのですが、このような機会をいただけるとは全く想像していませんでした。 去年のアドベン…

任意のバージョンのElasticsearchでSudachiプラグインを使う

Elasticsearch用の形態素解析器にKuromojiとは別にSudachiがあります。 こちらは外部プラグインとして提供されています。 詳しくは以下をご覧ください。 qiita.com 以下のリポジトリでElasticsearch用のSudachiプラグインが管理されています。 github.com 問…

DynamoDBでmap型を更新する(AWS SDK for Go)

はじめに Users テーブル Id Weapons 0 {"sord": "Normal", "hammer" : "Failure"} 1 {"hammer":"Normal"} 以上のようなテーブルがある時、Id:0のユーザーが新しく武器bowを取得した場合はどのようにクエリを発行すれば良いでしょうか。 問題点 上記のように…

Go Conference 2021 Springに登壇したメモ

資料 今日の登壇資料です!全文検索エンジンを自作している話をしましたhttps://t.co/0MgMH7c0EG#gocon— kotaroooo0 (@kotaroooo0) 2021年4月24日 4500PV, 270ブクマで良い反応があったとポジティブに捉えています。 資料作成 こちらの書籍を参考にしました…

テックブログ書いたメモ

engineer.recruit-lifestyle.co.jp

情報検索に興味が沸いたのでGoで検索エンジンを自作している

この記事はRecruit Engineers Advent Calendar 2020の11日目の記事です。 TL;DR 対象読者は転置インデックスを少し知ってるくらいの検索初心者です 検索エンジンに興味が湧き、仕組みを知るためにGoで自作しています 自作検索エンジンのAnalyzerとIndexerとS…

Goでビットベクトルを利用してSetを実装する

はじめに プログラミング言語Goを読んでいて、ビットベクトルを利用してSetを実装するところがありました。 シンプルかつ思いつきもしない方法だったので紹介します。 プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)作者:Alan A.A. D…

Goでトライ木を実装して共通接頭辞を可視化する

作ったもの トライ木をGraphvizで可視化するものを作りました。 github.com $ brew install graphviz $ go get github.com/kotaroooo0/mute $ vi data.txt $ mute -s data.txt | dot -T png -o sample.png # data.txt keynote keycase king kingdom macbook …

テックブログ書いたメモ

engineer.recruit-lifestyle.co.jp

GoからDocker上のElasticsearchに接続する際にネットワークのSniffingでハマった

問題 Docker で Elasticsearch を起動します。 services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.4.0 environment: - discovery.type=single-node ports: - 9200:9200 - 9300:9300 以下の Elasticsearch クライアントライ…

Goを体系的に学んでいるメモ その1

Go

はじめに プログラミング言語 Go の研修を受講しているので学びをメモしていきます。 プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)作者:Alan A.A. Donovan,Brian W. Kernighan発売日: 2016/06/20メディア: 単行本(ソフトカバー) …

ISUCON10予選敗退しました、次は決勝行くぞ

はじめに 社の同期 3 人の「スタンプラリー」チームで ISUCON10 予選に出場しました。 最終スコアは 1727 点で予選敗退しました。 50位くらいでした。 本戦出場ボーダーが2158点なので、あと1,2手というところでした。 やったこと(チームで) 予選前 ISUCON9 …

3ヶ月のブログメンタリングを通して学んだこと考えたこと

ブログメンタリングについて 6, 7, 8 月と @kakakakakkuさんのブログメンタリングを受けました。 週 2 で記事を投稿するルールを定めて、もし達成できない時は次の週に足りない分を追加で書きます。 例えば、食中毒になり 1 記事も書けなかった週がありまし…

Goのお作法を学んでセルフコードレビューしてみた

Go

はじめに 業務以外で Go でツールを作ったり、Twitter Bot を作ったりしています。 しかし、コードレビューを受ける機会がなく良い Go の書き方が身につかないのではと不安になりました。 そこで、さまざまな記事を参考にしてコードの書き方を学んでみました…

ISUCON: DBのデータをメモリに載せて高速化する

はじめに やり方 どのデータをオンメモリに載せるか どう実装するか 1. グローバルで変数を宣言します。 2. 初期化処理/initializeでメモリに載せます。 3. SQL を叩いて取得している部分をメモリに載せた Map から取得するように変えます。 おわりに 参考 …

CI上でのマルチステージビルドにおけるキャッシュ活用の銀の弾丸を見つけたかもしれない(Buildx, BuildKit)

銀の弾丸 以下でキャッシュ活用、ビルド、Push をよしなに行ってくれます。 $ docker login -u $DOCKERHUB_USER -p $DOCKERHUB_PASS # Docker Hub や ECR にログイン $ export DOCKER_CLI_EXPERIMENTAL=enabled # Buildxを有効にする $ docker buildx create…

Dockerfileを書かずにBuildpacksで圧倒的に軽量なDockerイメージを作成する(539MB->245MB)

はじめに 2018 年 10 月に Cloud Native Buildpacks は Cloud Native Computing Foundation (CNCF)に Sandbox として受け入れられました。 CNCF には Kubernetes, Prometheus, Envoy, Fluentd など有名プロジェクトも多く受け入れられています。 Buildpacks …

VagrantでISUCONを練習しようとしてハマったことと計測の準備

はじめに これを利用して、ISUCON の練習をします。 github.com 以下でベンチマーカーを動かすところまでできます。 $ git clone https://github.com/matsuu/vagrant-isucon.git $ cd isucon9-qualifier-standalone $ vagrant up $ vagrant ssh # VM上で以下…

Docker で立てた CI で Docker Build する -Docker in Docker と /var/run/docker.sock

はじめに CI では毎回まっさらな環境でテストやビルドができます。 これには、多くは Docker が用いられています。 さらには、Docker で実現されたまっさらな環境でも Docker ビルドなど Docker を利用できます。 前提知識: Docker クライアントと dockerd d…

キャッシュのためにDockerビルドで中間イメージをタグ付けしレジストリにPushする

WHY: なぜ中間イメージをタグ付けするのか 今では Docker イメージの軽量化のためにマルチステージビルドは欠かせません。 ローカルでの実行では問題ありませんが、CI 環境などの dockerd が毎度変わる Docker In Docker(dind)では問題が起こります。 最終イ…

Twitter Account Activity API を使ってリプライ自動返信する(Go)

Go

概要 Twitter Account Activity API を使うことでリプライの自動返信をできます。 しかし、手順が複雑であり公式ドキュメントも分かりにくいと感じたため記事にまとめます。 リプライの自動返信には以下の二段階が必要です。 認証を行いアプリケーションを W…

Dockerイメージ分析ツール「dive」を利用してDockerイメージを軽量化する

はじめに Docker イメージサイズは小さければ小さいほど、Push と Pull の高速化につながり嬉しいです。 docker historyによってイメージレイヤーごとのサイズは分かりますが、どのレイヤーのどのファイルのサイズが大きいかは分かりません。 $ docker histo…

GitHub Actionsを例にCI環境でのマルチステージビルドのキャッシュの活用について🐳

はじめに 以前、CI 環境での Docker ビルドのキャッシュについて記事を書きました。 kotaroooo0-dev.hatenablog.com 前回の記事のようにマルチステージビルドでない場合は、1 Dockerfile 1 Cache で問題ありませんでした。 しかし、今では Docker イメージの…

docker-composeでdepends_onしても起動順を制御するだけで稼働順は制御されない問題

本記事での言葉の定義 起動: 動き始めること(例: PC の電源ボタンを押すこと) 稼働: 働きはじめること(例: PC が利用可能になること) はじめに 以下の Redis と MySQL を利用するアプリケーションの docker-compose を考えます。 version: "3" services: app…