- Dockerfileの修正
- GitHub Action(push -> jarをリリース-> docker imagesを更新)
- アプリ内でデータファイルをURLから取得
- Test
Java環境がない場合、以下のdocker起動をご参考ください
- リリースページから最新のjarをダウンロード
- 日本郵便の郵便番号データダウンロードページからデータをダウンロードし、解凍
- jarを実行(以下は全国一括データの場合)
java -jar AddressSearch.jar KEN_ALL.CSV
初期起動の場合、インデックスファイルが同じフォルダに作成されます。
address-searchのイメージをご利用ください。 現時点でこのイメージは全国一括データファイルを利用しています。
docker pull monkeywzr/address-search
docker run -it --rm monkeywzr/address-search
全角となっている町域部分の文字数が38文字を越える場合、また半角となっているフリガナ部分の文字数が76文字を越える場合は、複数レコードに分割しています。
上記により、複数行に分散されたレコード(町域名、又は町域名フリガナ部分)の結合処理を行う。 結合条件:カラム3(郵便番号)が同じ、かつカラム13が"0"(一つの郵便番号で二以上の町域を表す場合に該当しない) (町域名フリガナ部分が分割されていないレコードが存在しますので、制御が必要)
// 結合対象
26105,"605 ","6050874","キヨウトフ","キヨウトシヒガシヤマク","トキワチヨウ","京都府","京都市東山区","常盤町(東大路通渋谷上る、渋谷通東大路東入、渋谷通東大路東入2丁目、",0,0,0,0,0,0
26105,"605 ","6050874","キヨウトフ","キヨウトシヒガシヤマク","トキワチヨウ","京都府","京都市東山区","東大路五条下る)",0,0,0,0,0,0
// 結合対象
26103, "60112", "6011255", "キョウトフ", "キョウトシサキョウク", "カミタカノヒガシヤマ(55、57-6、64、65、71-1、71-21、", "京都府", "京都市左京区", "上高野東山(55、57−6、64、65、71−1、71−21、", 1, 0, 0, 0, 0, 0
26103, "60112", "6011255", "キョウトフ", "キョウトシサキョウク", "72、189、189-1バンチ)", "京都府", "京都市左京区", "72、189、189−1番地)", 1, 0, 0, 0, 0, 0
// 結合対象外
[15213, "95902", "9590248", "ニイガタケン", "ツバメシ", "ヨシダハマクビ", "新潟県", "燕市", "吉田浜首", 0, 0, 0, 1, 0, 0]
[15213, "95902", "9590248", "ニイガタケン", "ツバメシ", "ヨシダハマクビチョウ", "新潟県", "燕市", "吉田浜首町", 0, 0, 0, 1, 0, 0]
- インデックス情報: 文字トークンと位置情報(データソースの該当行目)
トークン1,行目1,行目2,行目3,行目4,行目5,...
トークン2,行目1,行目2,行目3,行目4,行目5,...
...
- インデックスファイル名:
[source]_index.csv - データソースの住所情報
[都道府県, 市区町村, 町域]をぞれぞれbi-gramトークン化し、位置情報(行目)を記録 - トークン化の例:
[東京都, 江東区, 大島]-->[東京, 京都, 江東, 東区, 大島]
- 検索文字列をトークン化
- トークンごとでインデックスから位置情報を取得
- 位置情報情報をウェイトを計算する(同一行目のヒット回数) see: searchTokens
- 該当行目のデータをソースから取得、ウェイトの降順で表示する