住所文字列であいまい検索が遅いだの都道府県補完が面倒だのとやっているなら、いっそのこと検索を全文検索でできないのかい?と思いついた。
街区レベル位置参照情報CSVを読み込ませて、ユーザが指定したクエリに最もマッチする行(レコード)の、緯度経度部分文字列を正規表現なんかで取り出せれば、全文検索エンジンを使ったジオコーディングが出来そうな気がする。
やり方は二通り。贅沢にも全文検索エンジンを使ってしまう方法とRDBMSの全文検索機能を使う方法。
今現在使っているPostgreSQLの全文検索アドインがあれば、入れてみるのがてっとり早い。※
以下、HyperEstraierをジオコーディングのエンジンに使う場合について考えてみよう。
※sennaを使える。
PostgreSQLから『Ludia』でSennaの全文検索エンジンを試した
senna クエリの書式
・Webクロールで楽々メンテナンス
公開WebディレクトリのCSVデータを勝手にクロールして、吸いこんでくれれば、毎年更新される街区レベル位置参照情報のメンテナンスも楽々になる。
・高速な検索、ランキング
全文検索なら、文字の曖昧検索がRDBMSよりも高速だし、どの程度文字列が一致しているのかを評価する機能も持ってる。
HyperEstraierのAPIを理解するのが大変そうであるが、CSVを読み込んで、HyperEstraierの内部文書オブジェクトに変換したり、mecabで住所を分かち書きしてQDBMにインデックスを格納したり?
それにしてもHyperEstraierで何かする場合は、PerlとかJavaとかだもんなぁ。
IIS上でActivePerlってのもなんか、オーバーヘッドが厳しそうだ。
HyperEstraierのASP.NETラッパーなんて誰も作っていないよなぁ。