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
通过键获取文档