クエリの各「AND」部分を Solr フィルター クエリ (「fq」パラメーター) に入れ、キーワード検索の関連性のために「q」を残します。フィールド リスト ('fl' パラメータ) に関数クエリを配置して、距離を返すことができます: fl=*,dist:geodist()
. 「pt」や「sfield」などの他のパラメーターが必要です。並べ替えるには、 を使用しますsort=geodist() asc
。
geodist()
ただし、 v4.5 より前のバージョンの Solr では、空間 "RPT" フィールドで関数クエリを使用することはできません。4.4を使用しているようです。Solr 4.2 から 4.4 で RPT フィールド (複数の場所がある場合にのみ必要) でソートする必要がある場合は、別の方法でアプローチする必要があります。通常は「q」および「fq」パラメーターを使用する必要があるため、常に使用することをお勧めします (それぞれキーワードとフィルター)。Solr への私のクエリのこの echoParams 出力を検討してください。
"indent":"true",
"wt":"json",
"sort":"query({!bbox v='' filter=false score=distance}) asc",
"fl":"*,score,dist:query({!bbox v='' filter=false score=distance})",
"sfield":"geo",
"pt":"33.3232,-83.383",
"d":"150",
"q":"*:*",
"fq":"{!bbox}",
"fq":"id:9220"
ええ、それは醜いです。繰り返しますが、Solr 4.5 以降、これに頼る必要はなくなりました。
ちなみに、あなたが見ている動作は実際にはバグではありません。必要な結果を得るには、クエリを別の方法で構成する必要があります。