创建Haystack索引

    弃用

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

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

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

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

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

    例子

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

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

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

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

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

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

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