$30 off During Our Annual Pro Sale. View Details »

国交省のデータをSolrで検索

 国交省のデータをSolrで検索

SHAPE > PostGIS > Solr > Google Map

ryo0301

July 29, 2013
Tweet

More Decks by ryo0301

Other Decks in Technology

Transcript

  1. 国土交通省のデータをSolrで検索
    株 式 会 社 ネ ク ス ト 秀 野 亮
    @ r y o 0 3 0 1

    View Slide

  2. 自己紹介
    秀野 亮
    株式会社ネクスト
    @ryo0301
    不動産・住宅情報サイト HOME'S
    http://www.homes.co.jp/
    最近の仕事
    Solr -> AWS -> DQ10

    View Slide

  3. 発表の概要
    Lucene/Solr4の新しい(地理)空間検索
     http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4
    上記の機能を使ったデモとその説明
    国交省のデータ -> PostGIS -> Solr

    View Slide

  4. デモ:想定した機能
    地図上の小学校から、その学区内の物件を検索
    小学校をクリック
    学区を表示
    学区内の物件を表示
    地図上の指定した範囲の物件を検索
    おまけ
    内部的には同じ機能

    View Slide

  5. デモ:環境
    バージョン(5月時点の最新版)
    Solr4.3.0
    PostGIS2.0.3
    データ
    東京都のデータ
    POLYGON:学区
    POINT:小学校、公園、公共施設、バス停
    ※物件代わりに利用

    View Slide

  6. デモ:やります
    少々お待ちください

    View Slide

  7. デモ:実演中…

    View Slide

  8. 事前知識
    説明の前に軽く事前知識を・・・

    View Slide

  9. 事前知識:ジオメトリデータ
    点:駅/物件など
    POINT
    MULTIPOINT
    線:路線など
    LINESTRING
    MULTILINESTRING
    面:市区町村/学区など
    POLYGON
    MULTIPOLYGON

    View Slide

  10. 事前知識: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形式で行う

    View Slide

  11. 事前知識:Intersects
    Intersects
    交差するデータを検索する関数

    View Slide

  12. 環境:データの流れ
    &$
    TIQQHTRM
    1PTU(*4 HFPNLNM LNMT 4
    4PMS
    %*)
    ࠃަল

    View Slide

  13. 環境:SHAPE -> PostGIS
    &$
    TIQQHTRM
    1PTU(*4 HFPNLNM LNMT 4
    4PMS
    %*)
    ࠃަল

    View Slide

  14. 環境:SHAPE -> PostGIS
    国土交通省のデータを使って、緯度経度から市区町村までを取り出す
     http://qiita.com/masuidrive/items/21a282c7bf54fd6a4985

    View Slide

  15. 環境:PostGIS -> Solr
    &$
    TIQQHTRM
    1PTU(*4 HFPNLNM LNMT 4
    4PMS
    %*)
    ࠃަল

    View Slide

  16. 環境:PostGIS -> Solr
    PostGIS -> DIH
    DIHでDBから一括インポート
    select *, ST_AsText(geom) from school_district;
    ST_AsText関数でWKB→WKT変換
    DIH -> Solr
    SpatialRecursivePrefixTreeFieldType
    geohashで階層的にインデックスを保持
    WKT形式でインポート

    View Slide

  17. 環境:PostGIS -> Solr
    schema.xml
    spatialContextFactory="com.spatial4j.core.context.jts.JtsSpatialContextFactory"
    distErrPct="0.025" maxDistErr="0.000009" units="degrees"/>


    View Slide

  18. 環境:PostGIS -> S3
    &$
    TIQQHTRM
    1PTU(*4 HFPNLNM LNMT 4
    4PMS
    %*)
    ࠃަল

    View Slide

  19. 環境:PostGIS -> S3
    geom2kml
    select ST_AsKml(geom) from school_district;
    ST_AsKml関数でKML形式に変換
    ERBでKMLファイルを生成
    MULTIPOLYGONデータ(学区)が対象
    kml2s3
    KMLファイルをAmazon S3にアップロード

    View Slide

  20. 環境:PostGIS -> S3
    ST_AsKml関数の出力結果(MULTIPOLYGON)
    >139.763459000000012,35.6...
    139.763459000000012,35.663246999999998
    LinearRing>

    View Slide

  21. 環境:Solr/S3 -> Google Map
    &$
    TIQQHTRM
    1PTU(*4 HFPNLNM LNMT 4
    4PMS
    %*)
    ࠃަল

    View Slide

  22. 環境:Solr/S3 -> Google Map
    KmlLayer
    学区の範囲をGoogleMap上に表示
    S3上のKMLファイルのURLを指定するだけ
    Solrでの検索
    小学校検索 (geo:[10,20 TO 30,40])
    小学校→学区検索 (POINT→MULTIPOLYGON)
    学区→物件検索 (MULTIPOLYGON→POINT)
    指定範囲検索 (POLYGON→POINT)

    View Slide

  23. 実際のクエリ
    小学校→学区検索 (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フィールドに対して検索

    View Slide

  24. 注意点:必要なライブラリ
    Spatial4J
    https://github.com/spatial4j/spatial4j
    geospatial
    JTS
    http://sourceforge.net/projects/jts-topo-suite/
    spatial
    polygon support

    View Slide

  25. 注意点:必要なライブラリ
    Solr adapters
    Lucene spatial
    Spatial4J
    JTS

    View Slide

  26. 注意点:インデクシング遅い
    MULTIPOLYGONのインデクシングが遅い
    驚きの遅さ
    PostGISに間引きしてくれる関数があったような…

    View Slide

  27. EOP
    ありがとうございました。

    View Slide

  28. 蛇足
    ネクストでは、
    ヌルスタックエンジニアを
    募集しています!

    View Slide