PouchDB (CouchDB) как правильно организовать GIS поиск по имени сущности?

Вопрос следующего плана: Имеем точки на карте 3000+ занесенные в базу данных, каждая в качестве отдельного документа с _id в виде Geohash пример:

{
  "_id": "y1h8vmsum",
  "_rev": "1-sdfsdfsdfsdfsdfsdfsdfsdf"
}

И имеем вторую базу в которой занесено 10 000 + типов товаров каждый товар это отдельный документ пример:

{
  "_id": "0B3358C1-BA4B-4186-8795-9024203EB7DD",
  "name": "Супер пупер товар"
}

Отношение между точками и товарами, если ориентироваться на реляционную модель базы данных, как многие-ко-многим. То есть на каждой точке может быть несколько или все типы товаров, соответственно один тип товара может быть на нескольких точках. Вопрос следующий как организовать поиск типов товаров по наименованию в определенном радиусе на карте от определенной точки местоположения?

Upd:

Базы данных в pouchDB они реплицируются на мобильное устройство, там, на мобильном устройстве, они только читаются и должна делаться указанный выше GEO-Query. Подозрение есть что можно решить этот вопрос так: В документ каждого типа товара запихиваем массив точек где он может находится пример:

{
  "_id": "0B3358C1-BA4B-4186-8795-9024203EB7DD",
  "name": "Супер пупер товар",
  "points": [
    "y1h8vmsum",
    "y1h8vmvmv"
  ]
}

Поиск производим по полю "name" $and "points"

pouchBase.find({
  selector: {
    name: "Супер пупер товар",
    points: {
      "$elemMatch": {
        "points": "... Каким то макаром поинты в радиусе"
       }
     }
  }
});

Но если пихать массив точек в радиусе от устройства их может быть все 3000+ запрос сначала погибнет на передачи данных в pouchDB затем погибнет сама база на обработке. Возможно ли решить данный вопрос так или как то иначе учитывая что geo-query запросы должны выполняться offline на мобильном устройстве?


Ответы (0 шт):