Как сделать пост-фильтр с сервером Couchnode/Couchbase?

Я разрабатывал с использованием Couchbase Server 4.0, и обновление до 5.0 не за горами, но не сейчас.

Но на данный момент мне нужно искать представления (сопоставлять/уменьшать) с помощью текстового поиска, на Couchbase Lite .Net есть PostFilter, который служит этой цели.

Но я не смог найти те же настройки на Couchnode, проверка Couchbase Lite .Net сказала мне, что может помочь параметр запроса.

Я пробовал пару таких вещей:

  query.options.filter = r => {
    console.log('******', r)
    return true
  }
  query.options.post_filter = r => {
    console.log('******', r)
    return true
  }
  query.options.postFilter = r => {
    console.log('******', r)
    return true
  }

но ничего не работает. Кто уже сталкивался с этим, помогите!!


person Chinh Nguyen    schedule 17.12.2018    source источник


Ответы (1)


На сервере Couchbase запросы map/reduce создаются на самом кластере серверов, а не в SDK, как в Couchbase Lite. Пример:

function(doc, meta)
{
  emit(doc.name, [doc.city, doc.salary]);
}

Когда вы создаете представление, вы даете ему имя. Вы можете вызывать эти представления из Node SDK (couchnode) по имени, например:

var couchbase = require('couchbase');
var ViewQuery = couchbase.ViewQuery;

var query = ViewQuery.from('beer', 'by_name');

См. документацию: https://docs.couchbase.com/server/4.0/developer-guide/views-writing.html и https://docs.couchbase.com/nodejs-sdk/2.6/view-queries-with-sdk.html

person Matthew Groves    schedule 17.12.2018
comment
Ваша функция карты - действительно хороший пример для моего случая. Я хочу запросить строки с именем, содержащим некоторое значение, равное SQL LIKE %searchstring%. Я хорошо знаю N1QL, но в моем случае это НЕ (пока) вариант. Для более подробной информации я мог бы сделать это с помощью Couchbase Lite .NET PostFilter, но я не смог найти такой же эквивалент на Couchnode. Если это не вариант, то я думаю, что я должен сделать фильтрацию в памяти постранично. - person Chinh Nguyen; 18.12.2018
comment
Вы можете написать функцию уменьшения карты, которая выполняет это (например, используйте indexOf). Вы можете вызвать представление уменьшения карты с помощью coachnode, но представление должно быть создано в кластере (например, через пользовательский интерфейс Couchbase). - person Matthew Groves; 18.12.2018
comment
Это хороший выбор, за исключением того, что запись внутри функции Map/Reduce исправит поисковый запрос, а это не то, что я ищу. Спасибо! - person Chinh Nguyen; 18.12.2018
comment
Ах, ты прав. Вы можете выполнить некоторое сопоставление на основе ключей, но в лучшем случае это будет обходной путь. Однако на сервере 4.0 есть N1QL, так что вам не повезло. Также есть коннектор Elasticsearch для версии 4.0, так что это будет еще один вариант. - person Matthew Groves; 18.12.2018
comment
Ура! С нетерпением жду обновления до 4.0, 5.0 и даже 6.0 ... пока я должен придерживаться фильтрации в памяти. Спасибо за ваш комментарий! - person Chinh Nguyen; 19.12.2018