2

Solrを使って距離範囲検索をしようとしています。

5km の範囲内でフィルタリングするための検索を行うのは非常に簡単です。 &q=*:*&fq={!geofilt pt=45.15,-93.85 sfield=store d=5}

私が求めているのは、たとえば5 ~ 10 kmの範囲を見ている場合に同じことを行う方法です??

ありがとう

4

1 に答える 1

9

これにアプローチするいくつかの方法を次に示します。したがって、スコアを変更することが意図されていないため、明らかにクエリはフィルタークエリ (「fq」パラメーター) に入ります。そして、これらのパラメーターがリクエスト URL に設定されていると仮定しましょう (ただし、そこに配置する必要はありません)。

pt=45.15,-93.85&sfield=store

1 つのアプローチを次に示します。

_query_:"{!geofilt d=10}" -_query_:"{!geofilt d=5}"

_query_ Solr 構文ハックを使用して、クエリ パーサーを Lucene パーサーから geo パーサーに切り替える機会を提供するサブクエリを入力しました。

おそらく最速の別のアプローチを次に示します。

{!frange l=5 u=10}geodist()

これは、目的の範囲に制限される距離を返す関数クエリです。以前のように 2 回ではなく、各ドキュメントを 1 回ずつ評価するため、おそらく高速です。

これをキャッシュ不可としてマークし、bbox フィルターを追加して、すべてのドキュメントよりもはるかに少ない数のドキュメントを検査することができます。 これが最終結果です(URLエスケープされていません):

pt=45.15,-93.85&sfield=store&fq={!frange l=5 u=10 cache=false cost=100}geodist()&fq={!bbox d=10}
于 2012-06-03T07:13:10.223 に答える