4

検索結果をスコアと場所で並べ替えられるようにしたいと考えています。DB 内の各ユーザーには緯度/ロットがあり、現在インデックスを作成しています。

location :coordinates do
  Sunspot::Util::Coordinates.new latlon[0], latlon[1]      
end

検索対象のモデルも同じ方法でインデックス化されます。基本的に私が達成しようとしているのは、結果をスコア順、次に場所順に並べることです。したがって、Walmart を検索する場合、すべての Walmart を自分の場所に地理的に近い順に並べて表示したいと思います。

solr の新しいジオソートについて読んだことを覚えていますが、それがアルファ版ではないかどうか、および/または太陽黒点がラッパーを実装しているかどうかはわかりません。

あなたは何をお勧めします?

4

1 に答える 1

6

Sunspot が場所の種類を計算する方法のため、ターゲットからの距離によっても並べ替えるために追加の処理を行う必要があります。その仕組みは、ポイントごとにジオ ハッシュを作成し、そのジオ ハッシュに対して通常の全文検索を使用して検索することです。その結果、おそらく 10 km 離れたポイントが 5 km 離れたポイントよりも遠いかどうかを判断することはできませんが、50 km 離れたポイントが 1 ~ 2 km 離れたポイントよりも遠いかどうかは判断できます。 . 正確な距離は恣意的ですが、その結果、希望するほどきめ細かい結果が得られない可能性が高く、検索は、許容範囲内にあるポイントをフィルタリングする方法として機能します。組み込みのロケーション検索を使用してポイントをフィルタリングした後、目的を達成するための 3 つの方法があります。

  1. Solr 3.1 以降にアップグレードし、schema.xml をアップグレードして、新しい空間検索列を使用します。次に、Sunspot にカスタム変更を加えて、これらの新しいデータ型で機能するフィールドと順序を作成する必要があります。私が知る限り、これらは Sunspot ではまだ利用できないため、これらの接続を自分で作成する必要があり、Solr を調べて手動で構成する必要があります。
  2. Spatial Solr Pluginを活用します。新しい JAR を Solr ディレクトリにインストールする必要があり、Sunspot にいくつかの変更を加える必要がありますが、それらは比較的簡単で、完全な手順はここで見つけることができます。
  3. DB を活用します。DB が場所列にもインデックス付けされている場合は、Sunspot 組み込みの場所検索を使用して、結果を適切なサイズのセットに絞り込むことができます。次に、これらの結果を DB にクエリし、独自の距離関数を使用して現在地に近い順に並べ替えることができます。
于 2011-05-03T15:53:18.427 に答える