Solrで位置検索を試してみる

前回のエントリでSolr最新版とコアの作成まで行いました。
今回はインデックスの作成と、実際の位置検索を試してみたいと思います。

Schemaの設定

前回作成したコア「new_core」のスキーマ設定を行います。
スキーマについてはGUIから設定が行えるので、まずは「http://localhost:8983/solr/」にアクセスして管理画面を表示します

左側の「core selector」ドロップダウンから「new_core」を選択し、左下の「schema」から設定を行います。

今回は、以下の3つのフィールドを設定しました。

namefield type
spot_namestring
spot_lonlatlocation
spot_lonlat_rptlocation_rpt
※ほかの項目はデフォルト

ドキュメントを追加してみる

次にドキュメントを登録してみます
こちらもGUIから操作でいるので以下の操作で登録します

管理画面左メニューの「Documents」を選択し、ドキュメント登録画面を開く。
Request-Handler (qt)が/update、Document Typeがjsonになっていることを確認。

あとはテキストエリアに登録したいデータをjson形式で貼り付けて「Submit Document」ボタンを押せばドキュメントが登録されます。

今回は皇居の座標を登録してみます

{
     "spot_name":"皇居"
         "spot_lonlat":"35.68522718327026, 139.75281855559894",
         "spot_lonlat_rpt":"35.68522718327026, 139.75281855559894"
   }
登録が完了すると、画面右側にリザルトが表示されます

クエリ画面から登録したドキュメントを確認することができます

データが皇居だけだと寂しいので、他のデータも登録します

{
         "spot_name":"六本木ヒルズ"
         "spot_lonlat":"35.66033276799776, 139.7300920663161",
         "spot_lonlat_rpt":"35.66033276799776, 139.7300920663161"
   },
   {
         "spot_name":"東京タワー"
         "spot_lonlat":"35.65904325721179, 139.74552781219253",
         "spot_lonlat_rpt":"35.65904325721179, 139.74552781219253"
   },
     {
         "spot_name":"東京スカイツリー"
         "spot_lonlat":"35.710531307005695, 139.8145881641507",
         "spot_lonlat_rpt":"35.710531307005695, 139.8145881641507"
   },
       {
         "spot_name":"浅草寺"
         "spot_lonlat":"35.714392041907836, 139.79623220947755",
         "spot_lonlat_rpt":"35.714392041907836, 139.79623220947755"
   }

ちなみに、各ランドマークの緯度経度はGooglemap上で右クリックで調べることができます

位置検索を試してみる

データの登録が終わったので、実際に位置検索を行ってみます。
試した感じだとGUIからは実行できないようなので、ブラウザに以下のURLを指定して実行します

http://localhost:8983/solr/new_core/select?indent=true&q=*:*&fq={!geofilt}&sfield=spot_lonlat&pt=35.68552452793649,%20139.7528424411283&d=10

URLにアクセスすると、以下のような結果が返っています

パラメータ詳細は公式マニュアルを参照していただくのが一番です。
ここではptパラメータに皇居の座標を、dパラメータに10を指定しているので「皇居から10Km以内のスポット」を検索しているということになります。

試しにdパラメータを少なくします

dパラメータを5(5Km内)に設定したところ、浅草寺とスカイツリーは結果から外れてしまいました。
皇居から浅草寺まで距離を測ってみると、5.14Km前後だったため、たしかに5Km内には含まれませんでした。
正しく検索できているようですね。

以上

Solrで位置検索をやってみたというお話でした。これを使えば、「今いる場所から一番近いコンビニ」みたいな検索もできるようになりますね。
location_rptについては、より高度な位置検索(複雑な範囲内に存在するスポットなど)を検索できるらしいです(未確認・・・)