Docs Menu
Docs Home
/
MongoDBマニュアル
/ /

Haystack インデックスの作成

重要

MongoDB 5.0 で削除

MongoDB 5.0では、非推奨の geoHaystackインデックスと geoSearchコマンドが削除されます。 代わりに、 またはサポートされている$geoNear 地理空間クエリ演算子 のいずれかを使用した2 d インデックス を使用してください。

MongoDB インスタンスを 5.0 にアップグレードし、featureCompatibilityVersion5.0 に設定すると、既存の geoHaystack インデックスがすべて削除されます。

haystack インデックスは、ロケーション フィールドと 2 番目の フィールドの 2 つのフィールドを参照する必要があります。 2 番目のフィールドは完全一致に使用されます。 Haystack インデックスは、ロケーションと 1 つの追加条件での完全一致に基づいてドキュメントを返します。 これらのインデックスは、特定の場所に最も近いドキュメントを返すには必ずしも適していません。

haystack インデックスを構築するには、次の構文を使います。

db.coll.createIndex( { <location field> : "geoHaystack" ,
<additional field> : 1 } ,
{ bucketSize : <bucket value> } )

haystack インデックスを構築するには、インデックスの作成時にbucketSizeオプションを指定する必要があります。 5bucketSizeは、指定された経度と緯度の5単位内のロケーション値をグループ化するインデックスを作成します。 bucketSizeは、インデックスの粒度も決定します。 データのディストリビューションに パラメーターを調整して、通常は非常に小さなリージョンのみを検索するようにできます。 バケットで定義された領域は重複することができます。 ドキュメントは複数のバケットに存在できます。

次のようなフィールドを含むドキュメントを含む コレクションがある場合:

{ _id : 100, pos: { lng : 126.9, lat : 35.2 } , type : "restaurant"}
{ _id : 200, pos: { lng : 127.5, lat : 36.1 } , type : "restaurant"}
{ _id : 300, pos: { lng : 128.0, lat : 36.7 } , type : "national park"}

次の操作では、経度または緯度の1単位以内のキーを保存するバケットで haystack インデックスが作成されます。

db.places.createIndex( { pos : "geoHaystack", type : 1 } ,
{ bucketSize : 1 } )

このインデックスは、2 つの異なるバケットに値200を持つ_idフィールドを持つドキュメントを保存します。

  • _idフィールドの値が100であるドキュメントを含むバケット内

  • _idフィールドの値が300であるドキュメントを含むバケット内

haystack インデックスを使用してクエリを実行するには、 geoSearchコマンドを使用します。 「 Haystack インデックスのクエリ 」を参照してください。

デフォルトでは、haystack インデックスを使用するクエリは50ドキュメントを返します。

戻る

geohaystack