2017-02-01 3 views
2

Cloudant는 우리가 찾고있는 앱의 거의 모든 부분을 확인한 것으로 보이지만 약간 놀아 보았을 때 디자인 장벽이있었습니다.Cloudant 지형 공간 사용에 대한 아키텍처/디자인 제안

Google 앱은 근처에있는 X 명의 가장 가까운 사용자를 끌어 올 필요가 있습니다. Cloudant에서 직접 검색하거나 일반 검색 외에 사용할 수있는 지역 쿼리가 있음을 확인했습니다. 그러나 우리는 사용자의 위치를 ​​보호하기를 원하며 포인트로부터 거리를 쿼리하는 방법을 원하지만 지리 데이터가 연결되지 않은 상태에서 결과가 반환되기를 원합니다.

민감한 데이터를 걸러 내기 위해 geoindex 위에 "줄이기"기능을 통합하는 방법을 찾고 있었지만 존재하지 않는 것 같습니다.

또한 클라이언트에게 반환하기 전에 쿼리를 처리하고 지리 데이터를 제거 할 수있는 서버를 만들 수 있지만 Cloudant의 가장 큰 장점 중 하나는 오프라인에서 먼저 앱 사이드에서 DB로 동기화하는 것이 었습니다.

엔보이를 사용하여 사용자 데이터를 분류하는 데 사용되는 일부 위치 기반 자습서 (https://developer.ibm.com/clouddataservices/2016/06/14/location-tracker-part-1-offline-first/). 이는 우리가 가고자하는 방향 인 것으로 보이지만 아직 정확한 것은 아닙니다. 사용자가 여전히 서로에게 노출되어 있지는 않지만 사용자간에 지리 정보를 사용할 수 있기를 바랍니다.

Cloudant에서이 문제를 해결하는 방법에 대한 제안이 있으십니까?

답변

8

이렇게하려면 지형 공간 쿼리에 Cloudant Geo를 사용하지 말고 일부 지형 공간 쿼리 기능이있는 Cloudant Search를 사용하십시오. 다각형으로 쿼리 할 수는 없지만 비 공간 검색을 지역과 결합 할 수는 있습니다. 그것은 당신이 데이터의 속성에 대한 질의를하고, 한 지점으로부터 거리별로 결과를 정렬 할 수있게 해줍니다. 인덱스를 정의 할 때 지리 정보 필드를 인덱싱하지만 인덱스에 "store":"false"을 지정하여 클라이언트에 반환하지 마십시오. 여기에 블로그 게시물이 있습니다. https://developer.ibm.com/clouddataservices/2016/01/07/geospatial-query-with-cloudant-search/

그리고 https://opendata.cloudant.com/crimetest에 데이터베이스를 사용하는 코드가 있습니다. crimetest에있는 문서 중 일부에서

  1. 봐 : https://opendata.cloudant.com/crimetest/_all_docs?limit=3&include_docs=true

  2. Cloudant 검색 인덱스를 정의 Cloudant 대시 보드에서이 가진 새로운 검색 색인을 추가

function (doc) { 
 
    if (doc.properties.source && doc.properties.timestamp && doc.geometry.coordinates) { 
 
    index("description", doc.properties.desc, {"store":true}); 
 
    index("timestamp", doc.properties.timestamp, {"store":true}); 
 
    index("lat", doc.geometry.coordinates[1], {"store":false}); 
 
    index("lon", doc.geometry.coordinates[0], {"store":false}); 
 
    } 
 
}

    과 같이
  1. 쿼리를 : https://opendata.cloudant.com/crimetest/_design/geosearch/_search/spatial?q=*:*&sort=%22%3Cdistance,lon,lat,-90.127519,29.953602,mi%3E%22

당신은 -90.127519,29.953602에서의 거리에 따라 (q=*:*)가 정렬 된 모든 문서를 얻을 수 있습니다. 응답에서 첫 번째 요소는 마일 단위로 측정 된 지점으로부터의 거리입니다 (쿼리의 mi, 대신 km이 될 수 있음)