Cloudant couchdb更改api和地理空间索引
目前,我正在通过监视以下资源进行筛选复制:Cloudant couchdb更改api和地理空间索引,couchdb,cloudant,Couchdb,Cloudant,目前,我正在通过监视以下资源进行筛选复制: \u更改?过滤器=\u选择器和包含\u文档=真&附件=真&限制=20 如您所见,我使用的选择器由 "selector": { "type": "Property" } 一切都很顺利。现在我需要添加另一个标准,即地理空间索引。我想复制位置在半径范围内的文档。例如 纬度=-11.05987446,经度=12.28339928,半径=100 如何使用上述过滤复制技术进行复制,并在半径范围内复制文档? 感谢changes提要的_选择器过滤器没有索引支持,
\u更改?过滤器=\u选择器和包含\u文档=真&附件=真&限制=20
如您所见,我使用的选择器由
"selector": {
"type": "Property"
}
一切都很顺利。现在我需要添加另一个标准,即地理空间索引。我想复制位置在半径范围内的文档。例如
纬度=-11.05987446,经度=12.28339928,半径=100
如何使用上述过滤复制技术进行复制,并在半径范围内复制文档?
感谢changes提要的_选择器过滤器没有索引支持,它基本上是一个方便的快捷方式,可以实现与javascript过滤器相同的功能,但速度要快得多,因为它直接在Erlang中执行 因为它不是索引支持的,所以不能以这种方式访问地理索引 您最好运行一个边界框或radius查询来获取ID,然后使用bulk\u get或post-to-all\u-docs将ID放在正文中获取这些文档
changes提要的_选择器过滤器没有索引支持,它基本上是一个方便的快捷方式,可以实现与javascript过滤器相同的功能,但速度要快得多,因为它直接在Erlang中执行 因为它不是索引支持的,所以不能以这种方式访问地理索引 您最好运行一个边界框或radius查询来获取ID,然后使用bulk\u get或post-to-all\u-docs将ID放在正文中获取这些文档
用于
\u更改的选择器过滤器没有索引支持-它只是使用与相同的语法,目前不支持地理空间操作
我认为你有3个选择:
1.使用边界框
然后,您的选择器将类似于:
"selector": {
"type": "Property",
"lat": {
"$gt": -11
},
"lat": {
"$lt": 11
},
"lon": {
"$gt": 12
},
"lon": {
"$lt": 14
}
}
如果您确实需要径向搜索,那么您可以进一步限制客户端上的结果
2.在JavaScript过滤器中实现radius搜索
这意味着放弃“选择器”的使用会相对缓慢(任何涉及coach/Cloudant中JavaScript的操作都会很慢),但会给你想要的结果
3.运行查询并复制结果ID
使用or查询获取所需的一组id,并使用基于doc\u id
的复制来获取它们
最后,值得考虑的是,您是否真的需要复制(这意味着文档能够以两种方式同步),或者您是否只是将数据缓存/复制到客户端。复制带来的开销不仅仅是复制数据(它需要计算出客户端和服务器之间的增量,检索每个文档的版本历史记录等),因此,如果您不需要将文档写回服务器,那么您可能不需要它
如果确实执行复制路径,则可能需要处理以前复制的文档不再与查询匹配的情况,以便更新不会在后续复制中传播
如果没有,您最好只运行带有include\u docs=true
的查询,并手动将文档插入本地数据库。用于\u更改的选择器过滤器没有索引支持-它只使用与相同的语法,目前不支持地理空间操作
我认为你有3个选择:
1.使用边界框
然后,您的选择器将类似于:
"selector": {
"type": "Property",
"lat": {
"$gt": -11
},
"lat": {
"$lt": 11
},
"lon": {
"$gt": 12
},
"lon": {
"$lt": 14
}
}
如果您确实需要径向搜索,那么您可以进一步限制客户端上的结果
2.在JavaScript过滤器中实现radius搜索
这意味着放弃“选择器”的使用会相对缓慢(任何涉及coach/Cloudant中JavaScript的操作都会很慢),但会给你想要的结果
3.运行查询并复制结果ID
使用or查询获取所需的一组id,并使用基于doc\u id
的复制来获取它们
最后,值得考虑的是,您是否真的需要复制(这意味着文档能够以两种方式同步),或者您是否只是将数据缓存/复制到客户端。复制带来的开销不仅仅是复制数据(它需要计算出客户端和服务器之间的增量,检索每个文档的版本历史记录等),因此,如果您不需要将文档写回服务器,那么您可能不需要它
如果确实执行复制路径,则可能需要处理以前复制的文档不再与查询匹配的情况,以便更新不会在后续复制中传播
如果没有,您最好只使用include\u docs=true
运行查询,然后手动将文档插入本地数据库。如果使用cloudant,您可以为地理空间索引提供一些查询选项。根据需要更改它们,然后单击右上角的API以获取URL设置。如果使用cloudant,则可以为地理空间索引提供一些查询选项。根据您的意愿进行更改,然后单击右上角的API以获取URL设置。目前,这些要求仅要求单边复制,即服务器到客户端复制。由于我没有使用_replicator端点,我假设我没有得到您在双向复制
或同步
的情况下提到的开销。正确-这取决于您对\u更改
结果的处理方式。如果它不是客户端复制程序(PockDB等),那么您就没有开销。但是,如果您只需要获取与查询匹配的文档,那么使用索引而不是运行时迭代来更改
(实际上是过滤器所做的事情)可能会更有效。如果您担心传输您已经拥有的文档,那么可以分两个步骤进行操作-第一步从查询中获取ID,第二步使用\u all\u docs
通过键获取文档