Like-условие в CouchDB - PullRequest
       6

Like-условие в CouchDB

5 голосов
/ 15 сентября 2010

Я хочу выполнить LIKE-условие (синтаксис SQL) в CouchDB.Как это может быть сделано?LIKE-условие будет использоваться для выполнения автозаполнения в браузере.

Я хочу написать "co" в поле ввода и получить результаты Coffee, Couch, CouchDB и т. Д.

Ответы [ 3 ]

9 голосов
/ 29 сентября 2010

Очень легко искать буквы в начале строки.Вам просто нужно представление, которое выдает строку, которую вы хотите найти в качестве ключа.Предполагая, что пользовательский ввод хранится в переменной q, вы затем вызываете это представление с параметрами startkey=q и endkey=q+"\ufff0".

. Хитрость заключается в добавлении максимально возможного символа Unicode в строку поиска.,В порядке сортировки эта строка идет после всего, что начинается с q.(Это гораздо проще реализовать, чем решение, предложенное @titanoboa, где вам нужно «увеличить» последнюю букву пользовательского ввода.)

Если вы также хотите иметь возможность находить слова в серединестроки (например, «Отчет Колберта» при вводе «co»), вы можете использовать вид, подобный следующему:

function(doc) {
  if (doc.title) {
    var words = {};
    doc.title.replace(/\w+/g, function(word) {
      words[word.toLowerCase()] = true;
    });
    for (w in words) {
      emit(w, doc);
    }
  }
}

Конечно, это рекомендуется только для коротких строк.Для поиска в более длинных текстах вы должны заглянуть в надстройку полнотекстового поиска, например couchdb-lucene .

0 голосов
/ 15 сентября 2010

Чтобы реализовать ваш пример, вы можете создать представление, в котором ваше поле является ключом и тем же полем, весь документ или все, что вы хотите в качестве значения.Если вы запросите представление с параметрами startkey="co", endkey="cp", inclusive_end=false, вы получите все записи с ключом, который начинается с «co».

Конечно, это менее мощно, чем «LIKE».

0 голосов
/ 15 сентября 2010

Это не будет работать только с CouchDB. Лучше всего попробовать поисковую систему Lucene, которая хорошо работает с CouchDB. Lucene предназначен для полнотекстового поиска, который в основном то, что вы ищете. Здесь - некоторые инструкции по комбинации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...