È molto semplice cercare lettere all'inizio di una stringa. Hai solo bisogno di una vista che emetta la stringa che desideri cercare come chiave. Supponendo che l'input dell'utente sia memorizzato in una variabile q
, si chiama questa vista con i parametri startkey=q
e endkey=q+"\ufff0"
.
Il trucco qui è di aggiungere il più alto carattere Unicode possibile alla stringa di ricerca. Nell'ordine, questa stringa viene dopo qualsiasi altra cosa che inizia con q
. (Questo è molto più semplice da implementare rispetto alla soluzione suggerita da @titanoboa, dove è necessario "incrementare" l'ultima lettera dell'input dell'utente.)
Se si desidera poter trovare le parole nel mezzo di un stringa (ad esempio, "The Colbert report" durante la digitazione di "co"), è possibile utilizzare una vista come questa:
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);
}
}
}
Naturalmente questo è consigliabile solo per brevi stringhe. Per la ricerca in testi più lunghi dovresti cercare in un componente aggiuntivo di ricerca full-text come couchdb-lucene.
fonte
2010-09-29 15:11:40
Perché il carattere Unicode più alto possibile è 'fff0' e non' ffff'? – Jez
@Jez Questa è una buona domanda, non ho idea del motivo per cui ho scritto '\ ufff0' allora. Suppongo che il punto di codice corretto sarebbe '\ u {10FFFF}', ma non ho provato questo. (Https://en.wikipedia.org/wiki/UTF-8#Description) –