Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
国交省のデータをSolrで検索
Search
ryo0301
July 29, 2013
Technology
3
1.2k
国交省のデータをSolrで検索
SHAPE > PostGIS > Solr > Google Map
ryo0301
July 29, 2013
Tweet
Share
More Decks by ryo0301
See All by ryo0301
Blockchain x Slack botでピアボーナス
ryo0301
0
260
Quorum on AWS
ryo0301
0
600
Other Decks in Technology
See All in Technology
MagicPod導入から半年、オープンロジQAチームで実際にやったこと
tjoko
0
110
実践!カスタムインストラクション&スラッシュコマンド
puku0x
0
510
スマートファクトリーの第一歩 〜AWSマネージドサービスで 実現する予知保全と生成AI活用まで
ganota
2
310
DroidKaigi 2025 Androidエンジニアとしてのキャリア
mhidaka
2
380
Webアプリケーションにオブザーバビリティを実装するRust入門ガイド
nwiizo
7
880
「Linux」という言葉が指すもの
sat
PRO
4
140
エンジニアリングマネージャーの成長の道筋とキャリア / Developers Summit 2025 KANSAI
daiksy
3
740
[ JAWS-UG 東京 CommunityBuilders Night #2 ]SlackとAmazon Q Developerで 運用効率化を模索する
sh_fk2
3
460
はじめてのOSS開発からみえたGo言語の強み
shibukazu
3
960
Firestore → Spanner 移行 を成功させた段階的移行プロセス
athug
1
500
これでもう迷わない!Jetpack Composeの書き方実践ガイド
zozotech
PRO
0
1.1k
COVESA VSSによる車両データモデルの標準化とAWS IoT FleetWiseの活用
osawa
1
380
Featured
See All Featured
Docker and Python
trallard
46
3.6k
Writing Fast Ruby
sferik
628
62k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Documentation Writing (for coders)
carmenintech
74
5k
Facilitating Awesome Meetings
lara
55
6.5k
Designing for Performance
lara
610
69k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
53k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
Optimizing for Happiness
mojombo
379
70k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
Transcript
国土交通省のデータをSolrで検索 株 式 会 社 ネ ク ス ト 秀
野 亮 @ r y o 0 3 0 1
自己紹介 秀野 亮 株式会社ネクスト @ryo0301 不動産・住宅情報サイト HOME'S http://www.homes.co.jp/ 最近の仕事 Solr
-> AWS -> DQ10
発表の概要 Lucene/Solr4の新しい(地理)空間検索 http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4 上記の機能を使ったデモとその説明 国交省のデータ -> PostGIS -> Solr
デモ:想定した機能 地図上の小学校から、その学区内の物件を検索 小学校をクリック 学区を表示 学区内の物件を表示 地図上の指定した範囲の物件を検索 おまけ 内部的には同じ機能
デモ:環境 バージョン(5月時点の最新版) Solr4.3.0 PostGIS2.0.3 データ 東京都のデータ POLYGON:学区 POINT:小学校、公園、公共施設、バス停 ※物件代わりに利用
デモ:やります 少々お待ちください
デモ:実演中…
事前知識 説明の前に軽く事前知識を・・・
事前知識:ジオメトリデータ 点:駅/物件など POINT MULTIPOINT 線:路線など LINESTRING MULTILINESTRING 面:市区町村/学区など POLYGON MULTIPOLYGON
事前知識:WKB/WKT形式 WKB Well Known Binary 0101000000000000000000F03F000000000000F03F PostgreSQL(PostGIS)にはWKB形式で格納 WKT Well Known
Text MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((5 5,7 5,7 7,5 7, 5 5))) Solrへのインポート、検索クエリはWKT形式で行う
事前知識:Intersects Intersects 交差するデータを検索する関数
環境:データの流れ &$ TIQQHTRM 1PTU(*4 HFPNLNM LNMT 4 4PMS %*) ࠃަল
環境:SHAPE -> PostGIS &$ TIQQHTRM 1PTU(*4 HFPNLNM LNMT 4 4PMS
%*) ࠃަল
環境:SHAPE -> PostGIS 国土交通省のデータを使って、緯度経度から市区町村までを取り出す http://qiita.com/masuidrive/items/21a282c7bf54fd6a4985
環境:PostGIS -> Solr &$ TIQQHTRM 1PTU(*4 HFPNLNM LNMT 4 4PMS
%*) ࠃަল
環境:PostGIS -> Solr PostGIS -> DIH DIHでDBから一括インポート select *, ST_AsText(geom)
from school_district; ST_AsText関数でWKB→WKT変換 DIH -> Solr SpatialRecursivePrefixTreeFieldType geohashで階層的にインデックスを保持 WKT形式でインポート
環境:PostGIS -> Solr schema.xml <fieldType name="location" class="solr.SpatialRecursivePrefixTreeFieldType" spatialContextFactory="com.spatial4j.core.context.jts.JtsSpatialContextFactory" distErrPct="0.025" maxDistErr="0.000009"
units="degrees"/> <field name="geo" type="location" indexed="true" stored="true" multiValued="true"/>
環境:PostGIS -> S3 &$ TIQQHTRM 1PTU(*4 HFPNLNM LNMT 4 4PMS
%*) ࠃަল
環境:PostGIS -> S3 geom2kml select ST_AsKml(geom) from school_district; ST_AsKml関数でKML形式に変換 ERBでKMLファイルを生成
MULTIPOLYGONデータ(学区)が対象 kml2s3 KMLファイルをAmazon S3にアップロード
環境:PostGIS -> S3 ST_AsKml関数の出力結果(MULTIPOLYGON) <MultiGeometry><Polygon><outerBoundaryIs><LinearRing><coordinates >139.763459000000012,35.6... 139.763459000000012,35.663246999999998</coordinates></ LinearRing></outerBoundaryIs></Polygon></MultiGeometry>
環境:Solr/S3 -> Google Map &$ TIQQHTRM 1PTU(*4 HFPNLNM LNMT 4
4PMS %*) ࠃަল
環境:Solr/S3 -> Google Map KmlLayer 学区の範囲をGoogleMap上に表示 S3上のKMLファイルのURLを指定するだけ Solrでの検索 小学校検索 (geo:[10,20
TO 30,40]) 小学校→学区検索 (POINT→MULTIPOLYGON) 学区→物件検索 (MULTIPOLYGON→POINT) 指定範囲検索 (POLYGON→POINT)
実際のクエリ 小学校→学区検索 (POINT→MULTIPOLYGON) fq=geo:"Intersects(POINT(139.7343+35.6364))" 学区→物件検索 (MULTIPOLYGON→POINT) fq=geo:"Intersects(MULTIPOLYGON(((139.737202 35.640305,139.737358 35.640414,...305))))" ※geoフィールドに対して検索
注意点:必要なライブラリ Spatial4J https://github.com/spatial4j/spatial4j geospatial JTS http://sourceforge.net/projects/jts-topo-suite/ spatial polygon support
注意点:必要なライブラリ Solr adapters Lucene spatial Spatial4J JTS
注意点:インデクシング遅い MULTIPOLYGONのインデクシングが遅い 驚きの遅さ PostGISに間引きしてくれる関数があったような…
EOP ありがとうございました。
蛇足 ネクストでは、 ヌルスタックエンジニアを 募集しています!