2010-09-15 7 views
5

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

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

ответ

9

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

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

Если вы также хотите, чтобы найти слова в середине строка (например, «The Colbert Report» при вводе «совместное»), вы можете использовать представление, как это:

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

Почему наивысший возможный символ Юникода 'fff0', а не' ffff'? – Jez

+0

@Jez Это хороший вопрос, я понятия не имею, почему я написал '\ ufff0' тогда. Я полагаю, что правильная кодовая точка будет '\ u {10FFFF}', но я ее не тестировал. (Https://en.wikipedia.org/wiki/UTF-8#Description) –

0

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

0

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

Конечно, это менее мощный, чем «НРАВИТСЯ».

Смежные вопросы