Home > Tritonn

Tritonn Archive

郵便番号・住所検索

2008/1/20 追記

  • Internet Explorer で地図がドラッグできないバグを修正しました。

Debian GNU/Linux etch に Tritonn をインストールしなおしてみたよで自宅のサーバに Tritonn をインストールしなおして郵便番号のテーブルを作って色々といじっているわけなのですが、どうにも漢字の住所のインデックスが余りうまい具合にいってない様子。
手打ちで SQL 投げまくるのはどうにも面倒くさくなってきたので検索ページを作りました。勢いで公開します。

郵便番号・住所検索

スクリプト自体はレンタルサーバ上に置いてあるのですが、データベースは自宅のテスト用サーバにインストールしてあるので、時としてつながらない場合がございます。
今現在漢字のインデックスが余り芳しくないのでひらがなもしくは郵便番号での検索をおすすめします。

使い方

検索の仕方

テキストボックスに探したい地名、地名の一部、郵便番号、郵便番号の一部を入力して検索ボタンをクリックして下さい。
郵便番号は全角でも半角でもかまいません。ハイフンがあってもなくてもかまいません。
スペースでキーワードを区切るとアンド検索となります。スペースは半角でも全角でもかまいません。例)「かながわ さわ」
キーワードの先頭に-(ハイフン|マイナス)をつけるとそのキーワードが含まれる住所は検索しません。
検索結果の最大数は100件です。
検索結果が100件に満たないときは、検索内容に近い結果も含めて表示されます。
漢字の検索はイマイチです。
ラジオボタンで table(HTML) XML JSON が選択できますが、これはそのまま検索結果の表示方法となります。

table の検索結果をクリックすると

クリックした住所の Googlemaps が表示されます。
クリックした住所が Googlemaps で参照できなかった場合は文末から1文字ひいた住所で再検索します。
再検索は見つかるまで1文字減らして検索を繰り返します。
Googlemaps の上部に表示されている住所の辺りをドラッグすると Googlemaps を移動することができます。(Firefox のみ)
Googlemaps の上部に表示されている住所の辺りに表示されている をクリックすると Googlemaps が閉じます。

謝辞

テストとしてくれた team-one のみんなありがとう。

郵便番号・住所検索

郵便番号・住所検索

Debian GNU/Linux etch に Tritonn をインストールしなおしてみたよ

先日、Debian GNU/Linux に Tritonn をインストールしてみたよDebian GNU/Linux etch の PHP で Tritonn に接続するTritonn のインストールをお伝えしてきましたが、どうにも PHP がセグメンテーション違反を起こし、それがもうどうにもさっぱりなので気を取り直して Tritonn のインストール場所を Debian のパッケージにあわせてインストールしなおしてみました。

$ wget http://jaist.dl.sourceforge.jp/tritonn/28541/mysql-5.0.51-tritonn-1.0.8-linux-i686.tar.gz
$ tar zxvf mysql-5.0.51-tritonn-1.0.8-linux-i686.tar.gz
$ sudo mv mysql-5.0.51-tritonn-1.0.8-linux-i686 /var/lib/mysql
$ sudo groupadd mysql
$ sudo useradd -g mysql mysql
$ cd /var/lib/mysql
$ sudo chown -R root:root .
$ sudo chown -R mysql:root data
$ sudo scripts/mysql_install_db -umysql
$ sudo cp support-files/mysql.server /etc/init.d/mysql
$ sudo cp /var/lib/mysql/support-files/my-small.cnf /etc/my.cnf
$ sudo vim /etc/my.cnf

[client]
socket = /var/run/mysqld/mysqld.sock
[mysqld]
socket = /var/run/mysqld/mysqld.sock
basedir = /var/lib/mysql

$ sudo mkdir /var/run/mysqld
$ sudo chown mysql /var/run/mysqld

$ sudo update-rc.d mysql defaults
$ sudo ln -s /usr/include/mysql /var/lib/mysql/include
$ sudo cp -r /var/lib/mysql/lib/* /usr/lib

こんな感じで Apache と MySQL を再起動すると正常に動作しました。

ためしに「郵便番号と住所の対応表を「郵便番号データダウンロード – 日本郵便」からダウンロードして以下の様なテーブルを作って、そこに郵便データを登録するスクリプト」を作ってデータベースにガシガシ登録して全文検索を試してみました。

CREATE TABLE `zipcode` (
  `zipcode` varchar(7) default NULL,
  `prefecture_kana` varchar(36) default NULL,
  `city_kana` varchar(255) default NULL,
  `town_kana` varchar(255) default NULL,
  `prefecture` varchar(24) default NULL,
  `city` varchar(255) default NULL,
  `town` varchar(255) default NULL,
  FULLTEXT INDEX USING NGRAM, SECTIONALIZE (`zipcode`,`prefecture_kana`,`city_kana`,`town_kana`,`prefecture`,`city`,`town`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

カラムはそれぞれ

zipcode
郵便番号
prefecture_kana
都道府県(ひらがな)
city_kana
市区町村(ひらがな)
town_kana
町域
prefecture
都道府県
city
市区町村
town
町域

と言う感じです。

ためしに以下の以下のスクリプトを実行してみると

<?php
$DB = new PDO('mysql:host=localhost;dbname=test_db', 'test_user', '******');
$q = $DB->query(
    "SELECT * FROM `zipcode` WHERE MATCH(`zipcode`, `prefecture_kana`, ".
    "`city_kana`, `town_kana`, `prefecture`, `city`, `town`) ".
    "AGAINST('*W1, 2, 3, 4, 5, 6, 7 かわさき' IN BOOLEAN MODE) LIMIT 0, 10");
$r = $q->fetchAll(PDO::FETCH_ASSOC);
var_dump($r);
?>

きちんと結果が返ってきました。

array(10) {
  [0]=>
  array(7) {
    ["zipcode"]=>
    string(7) "0280051"
    ["prefecture_kana"]=>
    string(15) "いわてけん"
    ["city_kana"]=>
    string(9) "くじし"
    ["town_kana"]=>
    string(21) "かわさきちょう"
    ["prefecture"]=>
    string(9) "岩手県"
    ["city"]=>
    string(9) "久慈市"
    ["town"]=>
    string(9) "川崎町"
  }
  [1]=>
  array(7) {
    ["zipcode"]=>
    string(7) "9391553"
    ["prefecture_kana"]=>
    string(15) "とやまけん"
    ["city_kana"]=>
    string(12) "なんとし"
    ["town_kana"]=>
    string(18) "かみかわさき"
    ["prefecture"]=>
    string(9) "富山県"
    ["city"]=>
    string(9) "南砺市"
    ["town"]=>
    string(9) "上川崎"
  }
  [2]=>
  array(7) {
    ["zipcode"]=>
    string(7) "9130025"
    ["prefecture_kana"]=>
    string(15) "ふくいけん"
    ["city_kana"]=>
    string(12) "さかいし"
    ["town_kana"]=>
    string(30) "みくにちょうかわさき"
    ["prefecture"]=>
    string(9) "福井県"
    ["city"]=>
    string(9) "坂井市"
    ["town"]=>
    string(15) "三国町川崎"
  }
  [3]=>
  array(7) {
    ["zipcode"]=>
    string(7) "8720731"
    ["prefecture_kana"]=>
    string(18) "おおいたけん"
    ["city_kana"]=>
    string(9) "うさし"
    ["town_kana"]=>
    string(27) "あじむまちかわさき"
    ["prefecture"]=>
    string(9) "大分県"
    ["city"]=>
    string(9) "宇佐市"
    ["town"]=>
    string(18) "安心院町川崎"
  }
  [4]=>
  array(7) {
    ["zipcode"]=>
    string(7) "9690401"
    ["prefecture_kana"]=>
    string(18) "ふくしまけん"
    ["city_kana"]=>
    string(36) "いわせぐんかがみいしまち"
    ["town_kana"]=>
    string(18) "かわさきまち"
    ["prefecture"]=>
    string(9) "福島県"
    ["city"]=>
    string(18) "岩瀬郡鏡石町"
    ["town"]=>
    string(9) "川崎町"
  }
  [5]=>
  array(7) {
    ["zipcode"]=>
    string(7) "9170081"
    ["prefecture_kana"]=>
    string(15) "ふくいけん"
    ["city_kana"]=>
    string(12) "おばまし"
    ["town_kana"]=>
    string(12) "かわさき"
    ["prefecture"]=>
    string(9) "福井県"
    ["city"]=>
    string(9) "小浜市"
    ["town"]=>
    string(6) "川崎"
  }
  [6]=>
  array(7) {
    ["zipcode"]=>
    string(7) "2050021"
    ["prefecture_kana"]=>
    string(18) "とうきょうと"
    ["city_kana"]=>
    string(12) "はむらし"
    ["town_kana"]=>
    string(12) "かわさき"
    ["prefecture"]=>
    string(9) "東京都"
    ["city"]=>
    string(9) "羽村市"
    ["town"]=>
    string(6) "川崎"
  }
  [7]=>
  array(7) {
    ["zipcode"]=>
    string(7) "2891331"
    ["prefecture_kana"]=>
    string(12) "ちばけん"
    ["city_kana"]=>
    string(12) "さんむし"
    ["town_kana"]=>
    string(12) "かわさき"
    ["prefecture"]=>
    string(9) "千葉県"
    ["city"]=>
    string(9) "山武市"
    ["town"]=>
    string(6) "川崎"
  }
  [8]=>
  array(7) {
    ["zipcode"]=>
    string(7) "8270000"
    ["prefecture_kana"]=>
    string(18) "ふくおかけん"
    ["city_kana"]=>
    string(33) "たがわぐんかわさきまち"
    ["town_kana"]=>
    string(0) ""
    ["prefecture"]=>
    string(9) "福岡県"
    ["city"]=>
    string(18) "田川郡川崎町"
    ["town"]=>
    string(0) ""
  }
  [9]=>
  array(7) {
    ["zipcode"]=>
    string(7) "8270001"
    ["prefecture_kana"]=>
    string(18) "ふくおかけん"
    ["city_kana"]=>
    string(33) "たがわぐんかわさきまち"
    ["town_kana"]=>
    string(9) "あまぎ"
    ["prefecture"]=>
    string(9) "福岡県"
    ["city"]=>
    string(18) "田川郡川崎町"
    ["town"]=>
    string(9) "安眞木"
  }
}

Senna はよく知らないのでこれからお勉強です。

Debian GNU/Linux etch の PHP で Tritonn に接続する

2008/1/12 追記:このエントリの通りに行うとまずい可能性があります。詳しくはDebian GNU/Linux etch に Tritonn をインストールしなおしてみたよをご覧下さい

Debian の aptitude はとても便利なのですが、Tritonn みたいに手作業でインストールしているものがひとつでもあると大概やり直しという羽目になりがちです。
先日インストールした Tritonn の MySQL のバージョンは 5.0.51 で、PHP が参照している MySQL クライアントは 5.0.32 。
これを Tritonn のクライアントに向けるためにリビルドしてインストールしなおしましたメモ。

$ pear download pecl/mysql
$ tar xvzf mysql-1.0.tgz
$ cd mysql-1.0
$ ./configure --with-mysql=/usr/local/mysql
$ make
$ sudo make install
$ cd ..
$ pear download pecl/pdo_mysql
$ tar xvzf PDO_MYSQL-1.0.2.tgz
$ cd PDO_MYSQL-1.0.2
$ phpize
$ ./configure --with-pdo-mysql=/usr/local/mysql
$ make
$ sudo make install

これで PHP の MySQL は Tritonn のクライアントを見に行きました。

Debian GNU/Linux に Tritonn をインストールしてみたよ

2008/1/12 追記:このエントリの通りに行うとまずい可能性があります。詳しくはDebian GNU/Linux etch に Tritonn をインストールしなおしてみたよをご覧下さい

巷でうわさの Tritonn を Debian にインストールしてみました。そのときのメモ。

$ wget http://jaist.dl.sourceforge.jp/tritonn/28541/mysql-5.0.51-tritonn-1.0.8-linux-i686.tar.gz
$ tar zxvf mysql-5.0.51-tritonn-1.0.8-linux-i686.tar.gz
$ sudo mv mysql-5.0.51-tritonn-1.0.8-linux-i686 /usr/local/mysql
$ groupadd mysql
$ useradd -g mysql mysql
$ cd /usr/local/mysql
$ sudo chown -R root:root .
$ sudo chown -R mysql:root data
$ sudo scripts/mysql_install_db -umysql
$ sudo cp support-files/mysql.server /etc/init.d/mysql
$ sudo cp /usr/local/mysql/support-files/my-small.cnf /etc/my.cnf

と、ここまではサイトに記載されているインストールマニュアル通り。
Debian の apt などで PHP をインストールしていると、socket が /var/run/mysqld/mysqld.sock になるので、my.cnf 側で socket を変更しなければなりません。

$ sudo vim /etc/my.cnf

で、先ほどコピーした my.cnf を開き

[client]
socket = /var/run/mysqld/mysqld.sock
[server]
socket = /var/run/mysqld/mysqld.sock

と、socket の設定を変更。デフォルトでは /tmp/mysql.sock になっているはずです。
このままでは /var/run/mysqld がないので起動できません。と言う事で /var/run/mysqld を作ります。

$ sudo mkdir /var/run/mysqld
$ sudo chown mysql /var/run/mysqld

オーナーを mysql にするのを忘れずに。
最後に起動時のサービスに登録しておきます。

$ sudo update-rc.d mysql defaults

割とすんなりできました。

ホーム > Tritonn

Search
Feeds
Meta

Return to page top