2010-09-15 11 views
5

Quiero realizar una condición LIKE (sintaxis SQL) en CouchDB. ¿Cómo puede hacerse esto? La condición LIKE se usará para completar automáticamente en el navegador.Como-condición en CouchDB

Quiero escribir "co" en el campo de entrada y obtener los resultados Coffee, Couch, CouchDet ect.

Respuesta

9

Es muy fácil buscar letras al principio de una cadena. Solo necesita una vista que emita la cadena que desea buscar como la clave. Suponiendo que la entrada del usuario se almacena en una variable q, llame a esa vista con los parámetros startkey=q y endkey=q+"\ufff0".

El truco aquí es agregar el carácter Unicode más alto posible a la cadena de búsqueda. En el orden de clasificación, esta cadena viene después de todo lo demás, comenzando con q. (Esto es mucho más fácil de implementar que la solución sugerida por @titanoboa, donde necesita "incrementar" la última letra de la entrada del usuario.)

Si también desea poder encontrar palabras en el medio de un cadena (por ejemplo, "The Colbert Report" al escribir "co"), se puede utilizar una vista como esta:

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); 
    } 
    } 
} 

por supuesto, esto sólo es aconsejable para las cadenas cortas. Para buscar en textos más largos, debe buscar en un complemento de búsqueda de texto completo como couchdb-lucene.

+0

¿Por qué es el carácter Unicode más alto posible 'fff0' y no' ffff'? – Jez

+0

@Jez Esa es una buena pregunta, no tengo idea de por qué escribí '\ ufff0' en ese entonces. Supongo que el punto de código correcto sería '\ u {10FFFF}', pero no lo he probado. (https://en.wikipedia.org/wiki/UTF-8#Description) –

0

Eso no funcionará solo con CouchDB. Lo mejor es probar el motor de búsqueda Lucene que funciona bien con CouchDB. Lucene está diseñado para la búsqueda de texto completo, que es básicamente lo que estás buscando. Here son algunas instrucciones sobre la combinación.

0

Para implementar su ejemplo, puede crear una vista que tenga su campo como clave y el mismo campo, el documento completo o lo que quiera como valor. Si consulta la vista con los parámetros startkey="co", endkey="cp", inclusive_end=false, obtendrá todas las entradas con una clave que comienza con "co".

Por supuesto, esto es menos poderoso que 'LIKE'.