私のアプリケーションでは、すべてのユーザーのジオハッシュをテーブルに保存しており、それらのジオハッシュを使用してユーザーの隣人を見つけたいと考えています。
WikiでGeohashについて収集した情報によると:
データベースで使用する場合、geohashed データの構造には 2 つの利点があります。まず、geohash によってインデックス付けされたデータには、連続したスライス内の特定の長方形領域のすべてのポイントが含まれます (スライスの数は、必要な精度と geohash の「断層線」の存在によって異なります)。これは、単一インデックスに対するクエリが複数インデックス クエリよりもはるかに簡単または高速なデータベース システムで特に役立ちます。第 2 に、このインデックス構造は、迅速で汚れた近接検索に使用できます。最も近いポイントは、多くの場合、最も近いジオハッシュの中にあります。
たとえば、「sj8101b085」の隣人を見つけるために、次のようにしてハッシュを検索することを計画していました。
SELECT * FROM Users WHERE Geohash LIKE 'sj8101b085%'
次に、ハッシュ長を 1 つずつ減らして同じクエリを実行します。つまり、「sj8101b08%」、「sj8101b0%」など、必要な数のネイバーが得られるまで続けます。これだけでいいのだという印象を受けました。
しかし、同じ記事の最後で参照されているこの C ライブラリlibgeohashを見つけました。ライブラリには、GEOHASH_get_adjacent指定されたハッシュの隣接ハッシュを提供するという関数があります。geohash 文字列は、地球上の長方形の領域を表します。この関数は、隣接する長方形を表すジオハッシュを返します。これは、必要な数のネイバーを取得するまで、この関数を再帰的に実行する必要があることを意味します (ネイバー、次にネイバーのネイバーなど)。
検索アルゴリズムをどのように記述すればよいのでしょうか。最初のアプローチを使用するか、2番目のアプローチを使用しますか?