La búsqueda de texto completo (BTS) es una de las principales capacidades de los sistemas de gestión de contenidos para buscar tanto contenidos como metadatos asociados a los mismos. En un blog anterior, ya hablé de una nueva arquitectura totalmente escalable para la Gestión de Contenidos utilizando Apache Chemistry con repositorio Couchbase para metadatos (y posiblemente blobs). Hoy, me gustaría discutir sobre cómo integrar la capacidad FTS de una manera escalable en esta arquitectura sin la necesidad de otro nivel (ElasticSearch, Solr, LudicWorks).
En 2015, Couchbase ha anunciado el desarrollo de CBFT que significa Couchbase Full Text search, actualmente en vista previa para desarrolladores. CBFT es un servidor de texto completo simple, integrado y distribuido que cubre 80% de las características de la mayoría de las aplicaciones: http://connect15.couchbase.com/agenda/sneak-peek-cbft-full-text-search-couchbase/
En este artículo, voy a empezar a investigar cómo integrar CBFT en CMIS Apache Chemistry para la búsqueda de metadatos de texto completo.
- Configurar
Para instalar Couchbase, siga la documentación aquí.
Crear un cubo llamado cmismeta. Este bucket contiene la metatada de cada contenido (carpeta, archivo).
Para instalar Apache Chemistry utilizando el repositorio Couchbase, siga la documentación aquí.
Para instalar CBFT, siga la documentación aquí.
- Crear un índice CBFT
Iniciar CBFT en un nodo local : cbft -s http://localhost:8091
Dirija su navegador a la interfaz de administración web de cbft : http://localhost:8095

En la página de índices, haga clic en el botón Nuevo índice botón.
Crear un índice llamado cmis-fts en el cubo cmismeta.

- Pruebe su índice
Para probar su índice, debe añadir contenido en cmismeta cubo. Puede hacerlo utilizando el banco de trabajo de Apache Chemistry para crear contenido (carpeta, archivos) que se asociará con metadatos en cmismeta o añadiendo contenido sencillo para probarlo (y luego eliminarlo).
En este ejemplo, ya tengo un montón de archivos añadidos al repositorio Couchbase de Gestión de Contenidos.
Abra la pestaña de consulta e introduzca una consulta utilizando Sintaxis Bleve

- Proyecto CMIS Apache Chemistry
En primer lugar, debe activar las capacidades de consulta de texto completo de la clase de repositorio CMIS Couchbase.
public class CouchbaseRepository {
private RepositoryInfo createRepositoryInfo(CmisVersion cmisVersion) {
// establecer información del repositorio
RepositoryInfoImpl repositoryInfo = new RepositoryInfoImpl();
repositoryInfo.setCmisVersionSupported(cmisVersion.value());
…
// establecer las capacidades del repositorio
RepositoryCapabilitiesImpl capabilities = new RepositoryCapabilitiesImpl();
capabilities.setCapabilityQuery(CapabilityQuery.FULLTEXTONLY);
…
repositoryInfo.setCapabilities(capabilities);
devolver repositoryInfo;
}
}
Para consultar el índice CBFT, utilizamos la API REST con un cliente Jersey.
En primer lugar, añada la dependencia en el archivo pom de maven.
com.sun.jersey
jersey-cliente
1.8
A continuación, cree una nueva clase de servicio CBFT. Este servicio necesita la ubicación CBFT y el nombre del índice. Proporciono un método de consulta simple que devuelve una lista de claves referidas a cmismeta en Couchbase.
paquete org.apache.chemistry.opencmis.couchbase;
import java.util.ArrayList;
import java.util.List;
import com.couchbase.client.java.document.json.JsonArray;
import com.couchbase.client.java.document.json.JsonObject;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
public class CBFTService {
private String cbftLocation = null;
private Cliente cliente = null;
private String indexid = null;
public CBFTService(String location, String indexid) {
this.cbftLocation = ubicación;
this.indexid = indexid;
cliente = Client.create();
}
/** Buscar cbft índice.
* @param query la consulta a buscar
* @return lista de claves que coinciden con la consulta
* */
public Lista consulta(Cadena consulta){
Lista de resultados = new ArrayList();
WebResource webResource = cliente
.resource("http://"+this.cbftLocation+":8095/api/index/"+indexid+"/query");
Cadena entrada = "{" +
""q": ""+consulta+""," +
""indexName": ""+indexid+""," +
"tamaño": 10, "+
"de": 0, "+
""explain": true, "+
""highlight"": {}," +
""query"": {" +
""boost"": 1, "+
""query": ""+consulta + """+
“},”+
""fields"": [" +
“”*”” +
“],” +
"ctl": {" +
"consistencia": {"+
""nivel": ""," +
"vectores": {}"+
“},”+
""tiempo de espera": 0″+
“}”+
“}”;
ClientResponse response = webResource.type("application/json")
.post(ClientResponse.class, input);
if (response.getStatus() != 200) {
throw new RuntimeException("Fallido : código de error HTTP : "
+ response.getStatus());
}
String output = response.getEntity(String.class);
JsonObject contenido = JsonObject.fromJson(salida);
JsonArray hits = content.getArray("hits");
if(hits != null){
String id;
for(int i=0 ; i<hits.size(); i++){
id = hits.getObject(i).getString("id");
results.add(id);
}
}
devolver resultados;
}
}
Ahora puede consultar el servidor de gestión de contenidos mediante el banco de trabajo para recuperar contenidos utilizando la capacidad CBFT y hacer clic en el resultado para ver el contenido asociado.
