CouchDB индексирует документы GeoJSON, используя nano - PullRequest
0 голосов
/ 11 июня 2019

У меня есть CouchDB ( v2.3.1 ), содержащая множество документов GeoJSON. Я использую couchdb-nano и выполняю запросы, используя db.find().

Все мои запросы занимают слишком много времени (более 3-4 секунд), хотя я создал несколько индексов. Как лучше всего оптимизировать БД для таких сложных запросов или как я могу преобразовать этот запрос Манго в систему представлений?

Вот как я создаю индекс и как предварительно формирую запрос манго:

const indexDef = {
    index: {
      fields: [
        'fileName',
        'category',
        'features.properties.CNTR_CODE',
        'features.properties.CNTR_ID',
        'features.propertires.LEVL_CODE',
      ],
    },
    name: 'nutsindex',
  };

await db.createIndex(indexDef).then(result => {
    resolve(result);
  });

const couch = nano(DB_URI);
const db = couch.use(DB_NAME);
const limit = 999;
db.find({ selector, limit }).then(docs => docs)

Это пример типичного селектора:

{
   "year":2016,
   "category":"Region",
   "fileName":{
      "$or":[
         {
            "$regex":"(?i)label"
         },
         {
            "$regex":"(?i)10M"
         }
      ]
   },
   "features":{
      "$elemMatch":{
         "$and":[
            {
               "properties.LEVL_CODE":2
            },
            {
               "properties.CNTR_CODE":{
                  "$in":[
                     "FR"
                  ]
               }
            }
         ]
      }
   }
}
...