A pesquisa de texto completo (FTS) é um dos principais recursos dos sistemas de gerenciamento de conteúdo para pesquisar conteúdo e metadados associados ao conteúdo. Em um blog anteriorEm minha palestra, já falei sobre uma nova arquitetura totalmente dimensionável para o gerenciamento de conteúdo usando o Apache Chemistry com o repositório Couchbase para metadados (e possivelmente bolhas). Hoje, gostaria de discutir como integrar o recurso de FTS de forma escalonável nessa arquitetura sem a necessidade de mais uma camada (ElasticSearch, Solr, LudicWorks).
Em 2015, o Couchbase anunciou o desenvolvimento do CBFT, que significa Couchbase Full Text search (Pesquisa de texto completo do Couchbase), atualmente em versão prévia para desenvolvedores. O CBFT é um servidor de texto completo distribuído simples e integrado que cobre 80% dos recursos da maioria dos aplicativos. Você pode encontrar mais informações sobre o CBFT aqui: https://connect15.couchbase.com/agenda/sneak-peek-cbft-full-text-search-couchbase/
Neste artigo, começarei a investigar como integrar o CBFT no CMIS Apache Chemistry para pesquisa de texto completo de metadados.
- Configuração
Para instalar o Couchbase, siga a documentação aqui.
Crie um bucket chamado cmismeta. Esse bucket contém a metatada de cada conteúdo (pasta, arquivo).
Para instalar o Apache Chemistry usando o repositório do Couchbase, siga a documentação aqui.
Para instalar o CBFT, siga a documentação aqui.
- Criar um índice CBFT
Inicie o CBFT em um nó local: cbft -s https://localhost:8091
Aponte seu navegador da Web para a interface de administração da Web da cbft: https://localhost:8095

Na página de listagem de índices, clique no ícone Novo índice botão.
Criar um índice chamado cmis-fts na caçamba cmismeta.

- Teste seu índice
Para testar seu índice, você precisa adicionar conteúdo em cmismeta balde. Você pode fazer isso usando o Apache Chemistry workbench para criar conteúdo (pasta, arquivos) que será associado a metadados em cmismeta ou adicionando conteúdo simples para teste (e depois removendo-o).
Neste exemplo, já tenho vários arquivos adicionados ao repositório do Content Management Couchbase.
Abra a guia de consulta e insira uma consulta usando Sintaxe de bleve

- Projeto CMIS Apache Chemistry
Primeiro, você precisa ativar os recursos de consulta de texto completo da classe do repositório CMIS Couchbase.
classe pública CouchbaseRepository {
private RepositoryInfo createRepositoryInfo(CmisVersion cmisVersion) {
// definir informações de repositório
RepositoryInfoImpl repositoryInfo = new RepositoryInfoImpl();
repositoryInfo.setCmisVersionSupported(cmisVersion.value());
…
// definir recursos de repositório
RepositoryCapabilitiesImpl capabilities = new RepositoryCapabilitiesImpl();
capabilities.setCapabilityQuery(CapabilityQuery.FULLTEXTONLY);
…
repositoryInfo.setCapabilities(capabilities);
return repositoryInfo;
}
}
Para consultar o índice CBFT, estamos usando a API REST com um cliente Jersey.
Primeiro, adicione a dependência no arquivo pom do maven.
com.sun.jersey
cliente jersey
1.8
Em seguida, crie uma nova classe de serviço CBFT. Esse serviço precisa do local do CBFT e do nome do índice. Forneço um método de consulta simples que retorna uma lista de chaves referentes a cmismeta no Couchbase.
pacote org.apache.chemistry.opencmis.couchbase;
importar java.util.ArrayList;
importar 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;
importar com.sun.jersey.api.client.WebResource;
classe pública CBFTService {
private String cbftLocation = null;
private Client client = null;
private String indexid = null;
public CBFTService(String location, String indexid) {
this.cbftLocation = local;
this.indexid = indexid;
cliente = Client.create();
}
/** Pesquisar cbft índice.
* @param query a consulta a ser pesquisada
* @return lista de chaves que correspondem à consulta
* */
public List query(String query){
Resultados da lista = nova ArrayList();
WebResource webResource = cliente
.resource("https://"+this.cbftLocation+":8095/api/index/"+indexid+"/query");
String input = "{" +
""q": ""+query+""," +
""indexName": ""+indexid+""," +
""tamanho": 10, "+
""from": 0, "+
""explain": true, "+
""highlight": {}," +
""query": {" +
""boost": 1, "+
""query": ""+query + """+
“},”+
""fields": [" +
“”*”” +
“],” +
""ctl": {" +
""consistência": {"+
""nível": ""," +
""vetores": {}"+
“},”+
""timeout": 0″+
“}”+
“}”;
Resposta do ClientResponse = webResource.type("application/json")
.post(ClientResponse.class, input);
Se (response.getStatus() != 200) {
lançar uma nova RuntimeException("Failed : HTTP error code : "
+ response.getStatus());
}
String output = response.getEntity(String.class);
JsonObject content = JsonObject.fromJson(output);
JsonArray hits = content.getArray("hits");
se(hits != null){
String id;
for(int i=0 ; i<hits.size(); i++){
id = hits.getObject(i).getString("id");
results.add(id);
}
}
resultados de retorno;
}
}
Agora você pode consultar o servidor do Content Management usando o workbench para recuperar conteúdo usando o recurso CBFT e clicar no resultado para ver o conteúdo associado.
