创建Haystack索引

弃用

MongoDB 4.4不支持geoHaystack索引和地理搜索命令。使用$geoNear$geoWithin 的2d索引。

haystack索引必须引用两个字段:位置字段和第二个字段。第二个字段用于精确匹配。Haystack索引基于位置和对单个附加条件的精确匹配返回文档。这些索引不一定适合于将最近的文档返回到特定位置。

要构建一个haystack索引,请使用以下语法:

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

要构建haystack索引,必须在创建索引时指定**' bucketSize '选项。' bucketSize '' 5 '创建一个索引,该索引将指定经度和纬度的5个单位内的位置值分组。“bucketSize”**还决定了索引的粒度。您可以根据数据的分布调整参数,以便通常只搜索很小的区域。bucket定义的区域可以重叠。文档可以存在于多个桶中。

例子

如果您有一个包含类似以下字段的文档集合:

{ _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"}

下面的操作创建了一个带有buckethaystack索引,该bucket将键存储在一个经度或纬度单位内。

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

这个索引将值为200的**“_id”**字段存储在两个不同的存储桶中:

  • 在包含**“_id”字段值为“100”**的文档的bucket中

  • 在包含**“_id”字段值为“300”**的文档的bucket中

要使用haystack索引进行查询,可以使用 geoSearch 命令。参见查询Haystack索引. 默认情况下,使用haystack索引的查询返回50个文档。

最后更新于