位置情報の検索

【連載】

簡単導入! OSS全文検索サーバFess入門

【第26回】位置情報の検索

[2020/05/15 08:00]菅谷 信介 ブックマーク ブックマーク

今回は緯度経度の位置情報を用いた検索について説明します。

位置情報検索とは

Fessの位置情報検索は、緯度経度の位置情報を含めてドキュメントをインデックス化することで、位置情報で検索する機能です。 Googleマップなどの地図アプリと連携して検索結果を視覚化することも可能となっており、例えば、近くにある飲食店や宿泊施設検索などに利用することができます。

Fessでは位置情報を格納するフィールドとして「location」が定義されています。 位置情報検索を行いたい場合は、インデックス生成時に緯度経度を 「35.17614,-93.87341」のような形式でlocationフィールドに設定しておきます。

実際に検索する際は、検索リクエストのパラメータとして「geo.location.point」と「geo.location.distance」に値を指定します。geo.location.point に緯度/経度のペアを与え、geo.location.distanceにその地点からの距離を与えることで、 ある地点から一定の範囲内の位置情報を持つデータを対象に検索できます。

例えば、「geo.location.point=35.681,139.766&geo.location.distance=10.0km」をリクエストパラメータとして指定すると、 35.681,139.766の地点から半径10kmの範囲内の位置情報を持つドキュメントを対象として検索が可能です。

Fessの準備

では実際にFess 13.4.2を使ってインデックスを作成し、検索する方法について説明していきましょう。検索対象のデータには検索対象となるテキスト以外に位置情報も保持されている必要があるため、今回はCSVファイルのクロールで位置情報の検索を確認します。

インデックスの作成

まずは、位置情報を記載したCSVファイルをクロールしてインデックスを作成します。

今回はCSVファイルに以下を記載しています。 1番目のフィールドに位置情報、2番目のフィールドにタイトル、3番目のフィールドはコンテンツを記載しました。

"35.000,139.000","GEO 35:139.000","Test Message lat:35.000 lon:139.000"
"35.001,139.001","GEO 35:139.001","Test Message lat:35.001 lon:139.001"
"35.002,139.002","GEO 35:139.002","Test Message lat:35.002 lon:139.002"
"35.003,139.003","GEO 35:139.003","Test Message lat:35.003 lon:139.003"
"35.004,139.004","GEO 35:139.004","Test Message lat:35.004 lon:139.004"
"35.005,139.005","GEO 35:139.005","Test Message lat:35.005 lon:139.005"

(中略)

"35.996,139.996","GEO 35:139.996","Test Message lat:35.996 lon:139.996"
"35.997,139.997","GEO 35:139.997","Test Message lat:35.997 lon:139.997"
"35.998,139.998","GEO 35:139.998","Test Message lat:35.998 lon:139.998"
"35.999,139.999","GEO 35:139.999","Test Message lat:35.999 lon:139.999"

クロールの設定

次にクロール設定を作成します。Fessの管理画面から、「クローラ」>「データストア」>「新規作成」をクリックします。ハンドラ名は「CsvDataStore」を選択してください。

パラメータには、以下のように設定します。

directories=/tmp/csv
fileEncoding=UTF-8
quoteDisabled=false

作成したCSVファイルは「/tmp/csv/data.csv」に置いたので、「directories」にはCSVファイルのパスを指定しています。ファイルエンコードは作成したCSVファイルに合わせて入力してください。

続いてスクリプトには以下を記述します。

url="https://www.google.com/search?q=" + cell1
host="localhost"
site="localhost"
title=cell2
content=cell3
cache=cell3
digest=cell3
anchor=
content_length=cell3.length()
last_modified=new java.util.Date()
location=cell1

今回クロールするCSVファイルは、1フィールド目に位置情報を持っているので「cell1」をlocationフィールドに格納するように記述しています。

入力が終わったら、「作成」ボタンをクリックして設定内容を保存してください。

クロールの実行

クロール設定後、クロールを実行します。 「システム」 > 「スケジューラ」 > 「Default Crawler」 で「今すぐ開始」をクリックします。 クロールが完了するまでには少し時間がかかります。

クロールが終わったら、「http://localhost:8080/」にアクセスしてドキュメントを検索してみましょう。

通常の検索画面

では、リクエストパラメータに「geo.location.point=35.681,139.766&geo.location.distance=10.0km」を追加して検索してみます。 「http://localhost:8080/search/?num=10&sort=&q=geo&geo.location.point=35.681,139.766&geo.location.distance=10.0km」のように直接URLを入力しても構いません。

位置情報検索利用時の検索画面(URLにリクエストパラメータを追加)

このように、リクエストパラメータに「geo.location.point」と「geo.location.distance」を利用することで、指定した地点と範囲の位置情報を持つドキュメントだけを表示することができます。

∗ ∗ ∗

  今回は、Fessで緯度経度の位置情報を使って検索する方法を紹介しました。 検索サイト内で利用者の位置情報を取得すれば、「利用者の周辺にある位置座標を持つドキュメントを検索結果に表示させる」といったことも可能になります。

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

一覧はこちら

連載目次

もっと知りたい!こちらもオススメ

【連載】Kubernetes入門 [2] Dockerを触ってみる

【連載】Kubernetes入門 [2] Dockerを触ってみる

今回はコンテナをより深く理解するために、代表例であるDockerを実際に触ってみましょう。Dockerイメージを検索したり、作ってみたりした後に、リソースを割り当ててみます。

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で IT Search+ の人気記事をお届けします
注目の特集/連載
[解説動画] Googleアナリティクス分析&活用講座 - Webサイト改善の正しい考え方
[解説動画] 個人の業務効率化術 - 短時間集中はこうして作る
ミッションステートメント
教えてカナコさん! これならわかるAI入門
AWSではじめる機械学習 ~サービスを知り、実装を学ぶ~
対話システムをつくろう! Python超入門
Kubernetes入門
SAFeでつくる「DXに強い組織」~企業の課題を解決する13のアプローチ~
PowerShell Core入門
AWSで作るマイクロサービス
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

会員登録(無料)

ページの先頭に戻る