Wyszukiwanie liter na początku ciągu jest bardzo łatwe. Potrzebujesz tylko widoku, który emituje ciąg, który chcesz wyszukać jako klucz. Zakładając, że dane wejściowe użytkownika są przechowywane w zmiennej q
, wywołujesz ten widok z parametrami startkey=q
i endkey=q+"\ufff0"
.
Chodzi o to, aby do łańcucha wyszukiwania dołączyć najwyższy możliwy kod Unicode. W kolejności sortowania ten ciąg pochodzi po czymkolwiek innym zaczynającym się od q
. (To jest znacznie łatwiejsze do wdrożenia niż rozwiązanie sugerowane przez @titanoboa, gdzie musisz "zwiększyć" ostatnią literę danych wprowadzanych przez użytkownika).
Jeśli chcesz również znaleźć słowa w środku string (np „The Colbert Report” podczas wpisywania „CO”), można użyć widoku tak:
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);
}
}
}
oczywiście jest wskazane jedynie dla krótkich łańcuchach. W przypadku wyszukiwania dłuższych tekstów należy zajrzeć do dodatku do wyszukiwania pełnotekstowego, takiego jak couchdb-lucene.
Dlaczego najwyższy możliwy jest kod Unicode 'fff0', a nie' ffff'? – Jez
@Jez To dobre pytanie, nie mam pojęcia, dlaczego pisałem wtedy '\ ufff0'. Przypuszczam, że poprawny punkt kodowy miałby wartość '\ u {10FFFF}', ale nie testowałem tego. (https://en.wikipedia.org/wiki/UTF-8#Description) –