1

場所のみで Bbox 検索を行うと、正確なデータが返されます。しかし、さらに検索パラメータを追加すると、返される距離スコアが間違ったものになります-

例えば ​​-

ケース 1:

http://devtsg.truckertools.com/solr-4.4.0/collection1/select?wt=json&rows=1&fl=*,score&sort=score asc&q={!bbox スコア=距離 sfield=geo pt=33.3232,-83.383 d= 150}

-店舗の正しい距離を返します- "score":0.02656421

ケース 2:

しかし、Bbox を使用して別のチェックを追加すると、間違った距離スコアが返されます

http://devtsg.truckertools.com/solr-4.4.0/collection1/select?wt=json&rows=1&fl=*,score&sort=score asc&q=({!bbox スコア=距離 sfield=geo pt=33.3232,-83.383 d =150} および: )

-上記は"score":0.7258905を返しますが、これは間違っています。上記と同じはずです。

ケース 3:

念のため、ストアのIDでチェックを追加しました-

http://devtsg.truckertools.com/solr-4.4.0/collection1/select?wt=json&rows=1&fl=*,score&sort=score asc&q=({!bbox スコア=距離 sfield=geo pt=33.3232,-83.383 d =150} AND id:9220)

-これも間違った距離を返すようになりました- "score":9.05333

ここで何がうまくいかないのですか?前もって感謝します。

4

1 に答える 1

1

クエリの各「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 以降、これに頼る必要はなくなりました。

ちなみに、あなたが見ている動作は実際にはバグではありません。必要な結果を得るには、クエリを別の方法で構成する必要があります。

于 2013-10-08T21:36:00.143 に答える