Очень легко найти буквы в начале строки. Вам просто нужно представление, которое испускает строку, которую вы хотите найти в качестве ключа. Предполагая, что пользовательский ввод хранится в переменной 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.
Почему наивысший возможный символ Юникода 'fff0', а не' ffff'? – Jez
@Jez Это хороший вопрос, я понятия не имею, почему я написал '\ ufff0' тогда. Я полагаю, что правильная кодовая точка будет '\ u {10FFFF}', но я ее не тестировал. (Https://en.wikipedia.org/wiki/UTF-8#Description) –