1

指定された座標からの距離でソートされた結果を ElasticSearch が返すことに成功しました。問題は、ソートされている距離が、最も近い場所が必要な座標から利用可能な場所の平均距離であることです。 ElasticSearchは、オプション "sort_mode" ( Note: the geo distance sorting supports sort_mode options: min, max and avg.) を指定できると言っていますが、複数の場所の例は示していません。

results.sort の値を見ると、最も近い距離ではなく、平均距離が返されていることがわかります。最終的に必要なのは、最も近い場所までの距離です。

誰かがこれを正しく機能させるのを手伝ってくれるなら、私はとても感謝しています! ありがとう!

私の関連コード:

  mapping do
    indexes :locations do
      indexes :geolocation, type: "geo_point"
    end
  end


  sort do
    by :_geo_distance, 
    :sort_mode => "min", #THIS DOES NOT WORK! FIELDS ARE ORDERED BY AVERAGE DISTANCE, NOT SHORTEST
    "locations.geolocation" => coordinates,
    :order => sort_direction,
    :unit => "km"
    end
  end

**更新* *

これは実際には平均ではなく、Elasticsearch が検出した最初の距離にすぎないことがわかりました。また、入力するフィールドを 1 つだけ設定しようとしました: "geo_point" をハッシュ内の x 量の座標で設定しようとしましたが、同じ結果が得られます。誰かが私が間違っていることを知っている場合は、お知らせください。フィードバックをいただければ幸いです。

4

1 に答える 1

0

Ruby はわかりませんが、これは Ruby の問題というよりも Elasticsearch の問題のようです。

フィールドが実際に としてインデックス付けされている場合geo_point、最小距離で並べ替えることができるはずです。

新しいバージョンの ES ではソート モードのキーが変更されているため、ES のバージョンによっては、 を に変更する必要がある場合がありsort_modeますmode

に変更sort_modeしてmodeもうまくいかない場合は、elasticsearch によって報告されたタイプ マッピングと、使用している ES のバージョンを投稿してみてください。

タイプ マッピングの取得については、get mappingで詳しく説明されています。

于 2013-06-24T14:23:54.543 に答える