2022/02/21 郵便番号逆引き検索APIを正式リリースいたしました!
ケンオールに、住所から郵便番号を検索できる、郵便番号逆引き検索機能が追加されました。
(このデモはこちらでお試しいただけます。)
例えば、京都市上長者町通堀川東入一町目
という住所を検索してみます。この住所クエリは、上京区
という文字が抜けている、不完全な住所になっています。
http://api-beta.kenall.jp/v1/postalcode/?q=city:京都市+AND+kyoto_street:上長者町通堀川東入+AND+town:一町目
上記のような部分検索であっても正しい郵便番号を検索できます。
{ ... "postal_code": "6028064", ... "prefecture": "京都府", "city": "京都市上京区", "town": "一町目", "koaza": "", "kyoto_street": "上長者町通堀川東入", ... }
個別事業所番号にももちろん対応しています。
http://api-beta.kenall.jp/v1/postalcode/?q=corporation:国会図書館
検索すると、国立国会図書館
と国立国会図書館 関西館
の2件の結果が表示されます。
[{ ... "postal_code": "1008924", ... "prefecture": "東京都", "city": "千代田区", "town": "永田町", ... "corporation":{ "name": "国立国会図書館", "name_kana": "コクリツコツカイトシヨカン", "block_lot": "1丁目10-1", "post_office": "銀座", ... }}, { ... "postal_code": "6190287", ... "prefecture": "京都府", "city": "相楽郡精華町", "town": "精華台", ... "corporation":{ "name": "国立国会図書館 関西館", "name_kana": "コクリツコツカイトシヨカン カンサイカン", "block_lot": "8丁目1-3", "post_office": "山城木津", ... }}]
アーキテクチャ
ケンオールは、パースした郵便番号データをSQLiteに格納し、Dockerコンテナの起動時にSQLiteファイルをダウンロードしてからデプロイする形でサービスを提供しています。
郵便番号を元に住所を検索する場合、検索クエリ空間は約12万件のため、RDBMSで運用することに問題はありませんでした。 しかし、住所を元に郵便番号を検索する場合、検索クエリは自然言語となるため、郵便番号と1:1で対応しません。
そこで、今回逆引き検索機能を提供するにあたり、全文検索エンジンを新たに導入しました。
新たな郵便番号データが到着すると、ケンオールのシステムはデータをパースし、SQLiteファイルと全文検索エンジンのインデックスをそれぞれ作成します。 この新たなデータを元に、コンテナと検索エンジンがデプロイされます。
ユーザーは、API上はほとんど変わりませんが、検索するときに二種類のクエリを送信します。
- 従来の郵便番号検索(
/postalcode/<郵便番号>
): コンテナ配下のDBにSQL問い合わせを行います。 - 新機能の郵便番号逆引き検索(
/postalcode/?q=<検索クエリ>
): 検索エンジンに問い合わせを行います。
図にすると以下のような流れです。
ロードマップ
全文検索エンジンを導入したことで、検索機能の拡張性を手に入れることができました。 リリース時までに予定しているのは、形態素解析を利用した、フリーテキストの住所クエリによる検索です。
例えば、以下のようなクエリが実行できるようになることを目指しています。(2021/05/25時点ではこの機能はリリースしていません)
http://api-beta.kenall.jp/v1/postalcode/?t=京都市上京区上長者町通堀川東入一町目
郵便番号逆引き検索機能について
郵便番号逆引き検索機能はパブリックベータです。
アカウントをお持ちの方は、どなたでも自由にご利用いただけます。
アカウントを持っていない方は、こちらから登録してください。
郵便番号逆引き検索機能のドキュメントはこちらです。
フィードバックはこちらからお願いします。
郵便番号逆引き検索機能は、今後リリース予定の上位プランの一部となる予定です。
この上位プランでは、郵便番号逆引き検索の他にも様々な便利なAPIを提供していく予定ですので、今後のアップデートを楽しみにしてください。
(この記事はShodoで執筆されました)