Как реализовать сложные поисковые фильтры в couchdb?Должен ли я избегать временных просмотров? - PullRequest
4 голосов
/ 16 июля 2011

Я хочу администрировать свои пользовательские объекты в сетке.Я хочу отсортировать их, и я хочу иметь поисковый фильтр для каждого столбца.

Мой динамический сгенерированный временный вид работает нормально:

function(doc){
  if(doc.type === 'User' && 
    // Dynamic filters: WHERE firstName LIKE '%jim%' AND lastName LIKE '%knopf%'
    (doc.firstName.match(/.*?jim.*?/i) && 
    doc.lastName.match(/.*?knopf.*?/i)) ) {

    // Dynamic sort
    emit(doc.lastName, doc);
  }
}

НО везде написано, что нужно ИЗБЕГАТЬ временных представлений,Есть ли способ лучше?Должен ли я сохранять эти запросы по запросу во время выполнения?

Спасибо

1 Ответ

4 голосов
/ 16 июля 2011

Вы должны определенно не использовать временные представления, так как они должны пересчитываться каждый раз, когда они запрашиваются. (это очень «дорогой» процесс) Сохраненный просмотр идеален, если вы знаете поля, которые ищете заранее. (индекс строится один раз, после этого вносятся только инкрементные изменения)

Однако вы не сможете получать «содержащие» запросы. (вы можете получить точные совпадения и «начинать с» совпадений, но это не то, что показывает ваш пример) Если вам нужны специальные запросы, вам следует серьезно рассмотреть вопрос couchdb-lucene .

...