5

Sunspot gem を自分のアプリケーションに実装したところですが、位置検索を行うと一部の結果が除外されているように見えることを除けば、とても気に入っています。例: 私はオハイオ州コロンバスに住んでいるので、「オハイオ州コロンバス」を検索すると、アプリケーションはそれを緯度/経度に変換し、次のようにします:

@search = (Skatepark.search {

  with(:coordinates).near lat, lng, :precision => 3
  fulltext text
  paginate :page => params[:page], :per_page => 15

})

これにより、コロンバスの西側でジオコーディングされたいくつかのレコードが返されますが、DB にある東側のレコードは返されません。検索で何か間違ったことをしていますか?

http://skateparks.co/searchで自分で試すことができます。

"Columbus Ohio" で検索すると、南東に数マイルしか離れていない "Lancaster Ohio" で検索した場合とはまったく異なる結果が得られます。

4

1 に答える 1

4

これは、黒点が地理空間インデックスを生成するgem'pr_geohash'に依存しているためです。

ジオハッシュは、 z階数曲線の形式です。

このインデックスを使用して最近傍問題を解決しようとしていますが、その性質上、近似結果しか生成できません。Solrは、次元の呪いに悩まされている大規模なデータセットを処理するように設計されているため、作成者はこのアプローチを選択したでしょう。

要件に応じて、おそらく試してみてください

  1. サイロレスソリューション。Freebaseいくつかの宝石があります)
  2. SaaSソリューション
  3. 空間データベース
  4. ジオデータベース、
  5. またはあなた自身のアプローチ

提案された解決策

単純な緯度/経度ではなく、都市、町、村にgeojsonオブジェクトを使用します。ユーザーがFreebaseから直接ポリゴンを選択できるように、セマンティックオートコンプリートを使用します。(インターフェースの例:Quora検索ボックス)このように、放射状検索ではなく多角形の境界検索を実行しているため、要求された都市のすべての結果が返されます。

ビジネスモデルで可能な限り、親が市/町/村であるFreebaseLocationsとしてデータを利用できるようにすることをお勧めしますロケーションタイプロケーショントピックの両方が用意されていることがわかります。

アップデート1

Herokuを使用していることに気づきました。

専用のデータベースがある場合は、PostGISを使用できます。

そうでない場合は、共有データベースを使用してHerokuでGISクエリをどのように実行しますか?をお読みください。

于 2011-08-27T20:07:53.027 に答える