Skip to content

Commit

Permalink
Update 2024-11-29-貧乏企業名サジェスト機能開発.md
Browse files Browse the repository at this point in the history
  • Loading branch information
tubone24 authored Dec 4, 2024
1 parent dc06ad0 commit 6a80969
Showing 1 changed file with 10 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ templateKey: blog-post

## はじめに

おはようございます!!こんにちは!!
おはようございます!!こんにちは!!
この記事は**AWS re:invent開催のラスベガス**からお送りしてますが、一切AWS関係ないです....!!!

![](https://i.imgur.com/wuH4vwW.jpg)
Expand Down Expand Up @@ -52,7 +52,7 @@ templateKey: blog-post

企業名に関しては、国税庁が提供する[法人番号システム Web-API](https://www.houjin-bangou.nta.go.jp/pc/webapi/riyokiyaku.html)というものがあります。

商用利用についても
商用利用についても

「このサービスは、国税庁法人番号システムWeb-API機能を利用して取得した情報をもとに作成しているが、サービスの内容は国税庁によって保証されたものではない」

Expand All @@ -66,7 +66,7 @@ templateKey: blog-post

まずはサジェスト機能の要件を叶えるためのアーキテクチャを考えていきます。

例えば[Algolia](https://www.algolia.com/)だと全文検索エンジンに入力に対して**フロントエンドから直接細かく全文検索を実行し**結果をハイライトする形でサービスを構築することが推奨されています。(バックエンドを経由しない)
例えば[Algolia](https://www.algolia.com/)だと全文検索エンジンに入力に対して**フロントエンドから直接細かく全文検索し**結果をハイライトする形でサービスを構築することが推奨されています。(バックエンドを経由しない)

直接APIをフロントエンドから叩くことでバックエンドを経由しないことによるパフォーマンスの向上のほか専用のJSライブラリによるInstantSearch, Autocompleteの実装で開発速度の向上が図れるとのことです。

Expand All @@ -84,7 +84,7 @@ templateKey: blog-post

## データソースはどうする?

上記にもちらっと記載しましたが、世の中には[法人番号システム Web-API](https://www.houjin-bangou.nta.go.jp/pc/webapi/riyokiyaku.html)という便利なAPIがありますが、この元ネタになっている情報をCSVやXMLでダウンロードすることができます[基本3情報ダウンロード](https://www.houjin-bangou.nta.go.jp/download/)
上記にもちらっと記載しましたが、世の中には[法人番号システム Web-API](https://www.houjin-bangou.nta.go.jp/pc/webapi/riyokiyaku.html)という便利なAPIがありますが、この元ネタになっている情報をCSVやXMLでダウンロードできます[基本3情報ダウンロード](https://www.houjin-bangou.nta.go.jp/download/)

今回の記事では詳しく取り上げませんがこのCSVやXMLには企業名のほか、そのふりがなや住所、倒産や統合・社名変更に関する情報なども含まれております。

Expand Down Expand Up @@ -160,7 +160,7 @@ import debounce from "lodash/debounce";
御名答。そのとおりです。**"お金があれば"。"お金があれば"。"お金があれば"。**
インデックス量やワークロードにかかる負荷など前提条件は様々ですが、今回の企業名を検索する用途で使うとインデックス量がFargateのエフェメラルストレージ20GBに収まるため、**FargateやFargate spot**を使うことで圧倒的に安く作れます。
インデックス量やワークロードにかかる負荷など前提条件はさまざまですが、今回の企業名を検索する用途で使うとインデックス量がFargateのエフェメラルストレージ20GBに収まるため、**FargateやFargate spot**を使うことで圧倒的に安く作れます。
もちろん実運用だと可用性を考え冗長な構成を取ったりする必要はあるので**あくまでもケースバイケース**ということはご承知いただくのと、お金があるのであれば運用コストを考えてOpenSearchなどのマネージドサービスに乗っかったほうが100%よいとは思います。
Expand Down Expand Up @@ -302,7 +302,7 @@ docker run -d \
### スロークエリ監視
それでは早速インデックスを作って行きましょう
それでは早速インデックスを作っていきましょう
まず、リソース面を削りに削っていくためできる限り小さなコンテナにElasticsearchを展開していくため**スロークエリを監視できるように**しておきましょう。
Expand Down Expand Up @@ -542,15 +542,15 @@ response = es.indices.put_settings(index="companies", body=settings_body)
## 検索クエリ
検索クエリでは、様々な形式で登録したフィールドに対してマルチマッチで検索を実施します
検索クエリでは、さまざまな形式で登録したフィールドに対してマルチマッチで検索を実施します
- 検索対象
- company_name (通常の会社名)
- company_name.ngram (N-gram解析された会社名)
- hiragana_name (ひらがな)
の3つのフィールドに対して検索を行います
の3つのフィールドに対して検索します
### 検索手法の組み合わせ
Expand All @@ -576,12 +576,12 @@ company_name.keywordに対する前方一致検索を追加し、完全一致に
これにより、より適切な検索結果の順序付けを実現しています。
こうすることでより体験のよいサジェストを提供することができるはずです
こうすることでより体験のよいサジェストを提供できるはずです
## おわりに
本記事では、限られたリソースとコストの中で企業名サジェスト機能を実装する方法について、小さい小さいコンテナを使った実装とそのインデックス例を取り上げました。
本記事では、限られたリソースとコストのなかで企業名サジェスト機能を実装する方法について、小さい小さいコンテナを使った実装とそのインデックス例を取り上げました。
貧乏開発が必ずしもいいとは限りませんが、常にコスト意識を持つことの重要性を感じることができました。
Expand Down

0 comments on commit 6a80969

Please sign in to comment.