BASE
Base Objeto
"content": [
{
"field": {
"name": "nome",
"datatype": "Text",
"required": false,
"alias": "Primeiro Nome",
"multivalued": false,
"indices": [],
"description": "Primeiro nome do contato"
}
},
{
"field": {
"name": "sobrenome",
"datatype": "Text",
"required": false,
"alias": "Último Nome",
"multivalued": false,
"indices": [],
"description": "Último nome do contato"
}
}
],
"metadata": {
"name": "contato"
}
}
Criar Base
Cria uma base, de acordo com a estrutura fornecida. Retorna o id da base em caso de sucesso.
- json_base*: Estrutura/Template da base .
Definição
Exemplo
-d json_base='{
"content": [
{
"field": {
"name": "nome",
"datatype": "Text",
"required": false,
"alias": "Primeiro Nome",
"multivalued": false,
"indices": [],
"description": "Primeiro nome do contato"
}
},
{
"field": {
"name": "sobrenome",
"datatype": "Text",
"required": false,
"alias": "Último Nome",
"multivalued": false,
"indices": [],
"description": "Último nome do contato"
}
}
],
"metadata": {
"name": "nome_da_base_aqui"
}
}'
Alterar Base
Altera a estrutura da {base}, de acordo com a estrutura fornecida. Retorna “UPDATED” em caso de sucesso.
- json_base*: Estrutura da base.
put /{base}
Deletar Base
Deleta a base. Retorna “DELETED” em caso de sucesso.
delete /{base}
Importar Base
Importa dados para uma {base}.
- file: arquivo no formato “tar.gz”, contendo apenas 1 arquivo texto no formato utf8 a ser importado, o arquivo deve conter 1 JSON por linha, cada linha será um JSON representado no “model” da base selecionada.
- workers*: 5, numero de processo que serão criados para processar o importe, o valor default é 15
post {base}/_import
- Retorno:
{
"success":<int_quantidade_sucesso>,
"failure": <int_quantidade_falhas>
}
Exportar Base
Exporta uma base, especificada em {base}. Não possui implementação.
get {base}/_export
DOCUMENTOS
Criar Documento
Insere um novo documento na {base}. Retorna o id do documento em caso de sucesso.
- value*: Documento a ser inserido.
- validate*: 0, ao passar parâmetro validate=0 o json enviado não será validado, será inserido no sistema sem passar pela validação
post /{base}/doc
Recuperar Documento
Retorna o documento da {base} representado pelo {id}.
get /{base}/doc/{id}
Recuperar Documento Completo
Retorna o documento da {base} representado pelo {id}, com todos os atributos dos arquivos.
get /{base}/doc/{id}/full
Alterar Documento
Altera o documento da {base} representado pelo {id} para o novo documento. Retorna “UPDATED” em caso de sucesso.
- value*: Documento a ser alterado.
- validate*: 0, ao passar parâmetro validate=0 o json enviado não será validado, será inserido no sistema sem passar pela validação.
put /{base}/doc/{id}
Se o campo “If-Not-Modified-Since” estiver presente no Cabeçalho (Header) da Requisição, o documento só será atualizado se ele não tiver sido alterado desde a data contida no campo. Exemplo:
If-Not-Modified-Since: 28/12/2016 15:54:00
Alterar Parcialmente um Documento (PATCH)
Altera apenas os campos enviados em “value” do documento da {base} representado pelo {id}. Retorna “UPDATED” em caso de sucesso.
- value*: JSON com campos do documento a serem alterados.
- validate*: 0, ao passar parâmetro validate=0 o json enviado não será validado, será inserido no sistema sem passar pela validação
patch /{base}/doc/{id}
Em caso de campos multi-valorados, é possível passar:
- A lista inteira de items para substituir ou atualizar todos os elementos;
- Uma lista de comandos (ver abaixo) para alterar apenas alguns elementos e manter o restante como estavam;
Se o campo “If-Not-Modified-Since” estiver presente no Cabeçalho (Header) da Requisição, o documento só será atualizado se ele não tiver sido alterado desde a data contida no campo. Exemplo:
If-Not-Modified-Since: 28/12/2016 15:54:00
Comandos para Campos Multi-Valorados
É possível enviar comandos no lugar de elementos multi-valorados para manipular a lista.
Alterar Valor (set)
{ "$set#pos": (valor) }
- pos: indica a posição da repetição a ser alterada. Ex: “$set#0” altera o primeiro elemento da lista.
- (valor): o valor a ser inserido. Seu tipo depende do tipo do campo.
Adicionar Valor (add)
{ "$add": (valor) }
OU
{ "$add#[pos]": (valor) }
- pos (opcional): indica a posição onde o novo valor será inserido. Caso não seja especificada, o novo valor será inserido no final da lista. Ex: “$add#0” insere um novo elemento no início da lista.
- (valor): o valor a ser inserido. Seu tipo depende do tipo do campo.
Apagar Valor (remove)
{ "$remove": null }
OU
{ "$remove#[pos]": null }
- pos (opcional): indica a posição do valor que será apagado. Caso não seja especificada, o último valor da lista será apagado. Ex: “$remove#0” apagar o primeiro elemento da lista.
Exemplo
Consideremos um documento na base “example_base” com doc_id igual a 1 e com a seguinte estrutura:
{
"nome" : "Doc 1",
"letras": [ "A", "B", "C" ],
"numeros": [ 0, 1, 2 ]
}
E a requisição PATCH /example_base/doc/1 com o seguinte value:
{
"letras":
[
{ "$set#1": "X" },
{ "$remove": null },
{ "$add#0": "Z" }
],
"numeros": [ 3, 4, 5 ]
}
Após a execução desta operação, o documento passa a ter a seguinte estrutura:
{
"nome" : "Doc 1",
"letras": [ "Z", "A", "X" ],
"numeros": [ 3, 4, 5 ]
}
Como o campo “nome” não está presente nos dados da operação, ele permece como estava.
O campo “letras” dos dados da operação contém uma lista de comandos de alteração parcial que indicam as seguintes alterações:
- { “$set#1”: “X” }: altera o segundo elemento da lista, para o valor “X”. Resultado: [ “A”, “X”, “C” ]
- { “$remove”: null}: remove o último elemento da lista. Resultado: [ “A”, “X” ]
- { “$add#0: “Z”}: insere o valor “Z” no início da lista. Resultado: [ “Z”, “A”, “X” ]
Já o campo “números” foi completamente substituído pelo valor enviado na requisição.
Remover Documento
Remove o documento da {base} representado pelo {id}. Retorna “DELETED” em caso de sucesso.
delete /{base}/doc/{id}
Busca com Cache
Utiliza cache de documentos:
GET /cached/{base}/doc?cache_key=short_term
GET /cached/{base}/doc?cache_key=default_term
GET /cached/{base}/doc?cache_key=long_term
- Cache por ID de documento:
GET /cached/{base}/doc/{id_doc}?cache_key=short_term
GET /cached/{base}/doc/{id_doc}?cache_key=default_term
GET /cached/{base}/doc/{id_doc}?cache_key=long_term
As chaves são o seguinte:
- short_term: o cache expira em 60 segundos
- default_term: o cache expira em 300 segundos
- long_term: o cache expira em 3600 segundos
Cada atualização de um documento atualiza todos os caches daquela base. Ou seja: alterar ou apagar um documento limpa o cache de todos os documentos daquela base.
COLEÇÕES DE DOCUMENTOS
Retorna uma lista de documentos existentes, de acordo com a pesquisa fornecida. Para mais detalhes veja o arquivo neo.Brlight – REST – Select.odt.
- $$: JSON de Pesquisa.
- result_count: false
get /{base}/doc
Alterar nó de Documentos
Altera o nó de cada documento encontrado na pesquisa.
put /{base}/doc
- $$: JSON de Pesquisa.
- path: JSON no formato:
[
{
"path":"_metadata/dt_idx",
"mode":"update",
"fn": null,
"args":[null]
}
]
- Retorno:
{
"success":10,
"failure": 0
}
Insert
Inserir um novo grupo em path orgao
[
{
"path": "orgao",
"fn": null,
"mode": "insert",
"args":
[
{
"sg_gr_orgao": "ORGAOEX",
"nm_gr_orgao": "ORGAO > ORGAO > ORGAO > ORGAOEX - Nome do orgão por extenso"
}
]
}
]
Update
Alterar o telefone que for igual a 06135251421 para 06135251425
[
{
"path": "telefone/*",
"fn": "equals",
"mode": "update",
"args":
[
"06135251421",
"06135251425"
]
}
]
Alterar o telefone que iniciar com 061 para 06135251425
[
{
"path": "telefone/*",
"fn": "starts_with",
"mode": "update",
"args":
[
"061",
"06135251425"
]
}
]
Substituir parte do texto no telefone de 061 para 062
[
{
"path": "telefone/*",
"fn": "replace",
"mode": "update",
"args":
[
"061",
"062"
]
}
]
Alterar o campo sg_gr_orgao do grupo orgao que for igual a COJPN para CCJPN
[
{
"path": "orgao/*",
"fn": "attr_equals",
"mode": "update",
"args":
[
"sg_gr_orgao",
"COJPN",
"CCJPN"
]
}
]
Alterar os campos sg_gr_orgao e nm_gr_orgao do grupo orgao em que id_gr_orgao for igual a 11
[
{
"path": "orgao/*",
"fn": "attr_equals",
"mode": "update",
"args":
[
"id_gr_orgao",
11,{
"sg_gr_orgao":"ORGAOEX",
"nm_gr_orgao": "ORGAO > ORGAO > ORGAO > ORGAOEX - Nome do orgao por extenso"
}
]
}
]
Delete
Deletar todos os telefones iguais a 06135251421
[
{
"path": "telefone/*",
"fn": "equals",
"mode": "delete",
"args":
[
"06135251421"
]
}
]
Deletar toda repetição de orgao em que o campo id_gr_orgao seja null ou não exista
[
{
"path": "orgao/*",
"fn": "attr_equals",
"mode": "delete",
"args":
[
"id_gr_orgao",
null
]
}
]
Deletar todos os grupos orgao nos quais o campo id_gr_orgao seja igual 11 ou não exista
[
{
"path": "orgao/*",
"fn": "attr_equals",
"mode": "delete",
"args":
[
"id_gr_orgao",11,
true
]
}
]
Alterar Parcialmente nó de Documentos (PATCH)
Altera apenas os campos enviados do nó de cada documento encontrado na pesquisa.
patch /{base}/doc
- $$: JSON de Pesquisa.
- path: JSON no formato:
[
{
"path":"_metadata/dt_idx",
"mode":"patch",
"fn": null,
"args":[null]
}
]
Se o campo “If-Not-Modified-Since” estiver presente no Cabeçalho (Header) da Requisição, o documento só será atualizado se ele não tiver sido alterado desde a data contida no campo. Exemplo:
If-Not-Modified-Since: 28/12/2016 15:54:00
- Retorno:
{
"success":10,
"failure": 0
}
Possui as mesmas funções de atualização condicional disponíveis no modo “update” da rota PUT: equals, starts_with, replace, attr_equals.
Existem 3 modos: PATCH, MERGE, MANUAL. Eles afetam a forma como as listas (campos multivalorados) são atualizadas.
Mode: "patch"
Substitui cada item de um campo multi-valorado pela posição.
Exemplo
Registro Original:
{
"campo": "valor",
"grupo":
{
"campo_a": "valor_a",
"campo_b": "valor_b"
},
"campo_multi": ["a", "b", "c"],
"grupo_multi":
[
{
"campo_multi_a": "valor_multi_a1",
"campo_multi_b": "valor_multi_b1"
},
{
"campo_multi_a": "valor_multi_a2",
"campo_multi_b": "valor_multi_b2"
},
{
"campo_multi_a": "valor_multi_a3",
"campo_multi_b": "valor_multi_b3"
}
]
}
Requisição:
PATCH /lbg/base/doc?$$={“literal”: “id_doc = 1”}
{
"path": "/",
"mode": "patch",
"fn": null,
"args":
[
{
"campo": "valor - PATCHED",
"campo_multi": ["d", "e"],
"grupo_multi":
[
{
"campo_multi_a": "valor_multi_a1 - PATCHED"
},
{
"campo_multi_b": "valor_multi_b2 - PATCHED"
},
{
"campo_multi_a": "valor_multi_a3 - PATCHED",
"campo_multi_b": "valor_multi_b3 - PATCHED"
}
]
}
]
}
Resultado:
{
"campo": "valor - PATCHED",
"grupo":
{
"campo_a": "valor_a",
"campo_b": "valor_b"
},
"campo_multi": ["d", "e", "c"],
"grupo_multi":
[
{
"campo_multi_a": "valor_multi_a1 - PATCHED",
"campo_multi_b": "valor_multi_b1"
},
{
"campo_multi_a": "valor_multi_a2",
"campo_multi_b": "valor_multi_b2 - PATCHED"
},
{
"campo_multi_a": "valor_multi_a3 - PATCHED",
"campo_multi_b": "valor_multi_b3 - PATCHED"
}
]
}
Mode: "merge"
Faz a união de todos os itens presentes na requisição e no banco, inserindo novos itens no final da lista.
Exemplo
Requisição:
PATCH /lbg/base/doc?$$={“literal”: “id_doc = 1”}
{
"path": "/",
"mode": "merge",
"fn": null,
"args":
[
{
"campo": "valor - PATCHED",
"campo_multi": ["d", "e"],
"grupo_multi":
[
{
"campo_multi_a": "valor_multi_a1 - PATCHED",
},
{
"campo_multi_b": "valor_multi_b2 - PATCHED"
},
{
"campo_multi_a": "valor_multi_a3 - PATCHED",
"campo_multi_b": "valor_multi_b3 - PATCHED"
}
]
}
]
}
Resultado:
{
"campo": "valor - PATCHED",
"grupo":
{
"campo_a": "valor_a",
"campo_b": "valor_b"
},
"campo_multi": ["a", "b", "c", "d", "e"],
"grupo_multi":
[
{
"campo_multi_a": "valor_multi_a1",
"campo_multi_b": "valor_multi_b1"
},
{
"campo_multi_a": "valor_multi_a2",
"campo_multi_b": "valor_multi_b2"
},
{
"campo_multi_a": "valor_multi_a3",
"campo_multi_b": "valor_multi_b3"
},
{
"campo_multi_a": "valor_multi_a1 - PATCHED",
},
{
"campo_multi_b": "valor_multi_b2 - PATCHED"
},
{
"campo_multi_a": "valor_multi_a3 - PATCHED",
"campo_multi_b": "valor_multi_b3 - PATCHED"
}
]
}
Mode: "manual"
A manipulação dos campos multivalorados é feita de forma manual por meio de comandos. Ver detalhes sobre cada comando na seção Comandos para Campos Multi-Valorados
Exemplo
Requisição:
PATCH /lbg/base/doc?$$={“literal”: “id_doc = 1”}
{
"path": "/",
"mode": "manual",
"fn": null,
"args":
[
{
"campo": "valor - PATCHED",
"campo_multi":
[
{ "$remove#1": null },
{ "$add#0": "d" },
{ "$add": "e" }
],
"grupo_multi":
[
{ "$set#0": { "campo_multi_a": "valor_multi_a1 - PATCHED" } },
{ "$remove#1": null },
{
"$add":
{
"campo_multi_a": "valor_multi_a4",
"campo_multi_b": "valor_multi_b4"
}
}
]
}
]
}
Resultado:
{
"campo": "valor - PATCHED",
"grupo":
{
"campo_a": "valor_a",
"campo_b": "valor_b"
},
"campo_multi": ["d", "a", "c", "e"], # e o "b" (posição 1) foi removido
"grupo_multi":
[
{
"campo_multi_a": "valor_multi_a1 - PATCHED",
"campo_multi_b": "valor_multi_b1"
},
{
"campo_multi_a": "valor_multi_a3",
"campo_multi_b": "valor_multi_b3"
},
{
"campo_multi_a": "valor_multi_a4",
"campo_multi_b": "valor_multi_b4"
}
]
}
NÓS DE DOCUMENTOS
Recuperar nó de um Documento
Retorna parte do documento da {base} representado pelo {id} e pelo caminho dos nós {n1}/{n2}/…
get /{base}/doc/{id}/{n1}/{n2}/...
Inserir valor no nó de um Documento
Insere um objeto JSON no documento da {base} representado pelo {id} e pelo caminho dos nós {n1}/{n2}/… Funciona apenas para Campos ou Grupos multi valorados. Retorna o último índice da lista em que o objeto foi inserido.
- value*: Objeto a ser inserido no caminho representado pelos nós {n1}/{n2}/…
- validate*: 0, ao passar parâmetro validate=0 o json enviado não será validado, será inserido no sistema sem passar pela validação
post /{base}/doc/{id}/{n1}/{n2}/...
Se o campo “If-Not-Modified-Since” estiver presente no Cabeçalho (Header) da Requisição, o documento só será atualizado se ele não tiver sido alterado desde a data contida no campo.
Exemplo:
If-Not-Modified-Since: 28/12/2016 15:54:00
Alterar valor no nó de um Documento
Altera um objeto JSON no documento da {base} representado pelo {id} e pelo caminho dos nós {n1}/{n2}/… Retorna “UPDATED” em caso de sucesso.
- value*: Objeto a ser alterado no caminho representado pelos nós {n1}/{n2}/…
- validate*: 0, ao passar parâmetro validate=0 o json enviado não será validado, será inserido no sistema sem passar pela validação
put /{base}/doc/{id}/{n1}/{n2}/...
Se o campo “If-Not-Modified-Since” estiver presente no Cabeçalho (Header) da Requisição, o documento só será atualizado se ele não tiver sido alterado desde a data contida no campo.
Exemplo:
If-Not-Modified-Since: 28/12/2016 15:54:00
Alterar Parcialmente valor no nó de um Documento (PATCH)
Altera apenas os campos enviados na requsição de um objeto JSON no documento da {base} representado pelo {id} e pelo caminho dos nós {n1}/{n2}/… Retorna “UPDATED” em caso de sucesso.
- value*: Objeto JSON contendo os campos a serem alterados no caminho representado pelos nós {n1}/{n2}/…
- validate*: 0, ao passar parâmetro validate=0 o json enviado não será validado, será inserido no sistema sem passar pela validação
patch /{base}/doc/{id}/{n1}/{n2}/...
Se o campo “If-Not-Modified-Since” estiver presente no Cabeçalho (Header) da Requisição, o documento só será atualizado se ele não tiver sido alterado desde a data contida no campo.
Exemplo:
If-Not-Modified-Since: 28/12/2016 15:54:00
Remover nó de um Documento
Remove um objeto JSON no caminho representado pelos nós {n1}/{n2}/… do documento representado pelo {id} da {base}. Retorna “DELETED” em caso de sucesso.
delete /{base}/doc/{id}/{n1}/{n2}/...
Se o campo “If-Not-Modified-Since” estiver presente no Cabeçalho (Header) da Requisição, o documento só será atualizado se ele não tiver sido alterado desde a data contida no campo.
Exemplo:
If-Not-Modified-Since: 28/12/2016 15:54:00
ARQUIVOS
Inserir arquivo
Destina-se ao upload de arquivos.
post {base}/file
Nota
Após o upload é gerado o “json_file” do registro de arquivo (file). Perceba que para cada base (doc) criada no LightBase é criado um repositório de arquivos (file) sendo este onde efetivamente o arquivo é guardado. Para que seja associado um arquivo (file) a um registro de documento (doc), faz-se necessário registrar essa informação neste último conforme o procedimento em Associar arquivo a documento.
- Parâmetros
file: Input/campo que recebe o binário do arquivo.
- Retorno
O valor do json_file é retornado pelo servidor após enviado um arquivo para a base definida em base conforme o modelo abaixo…
{
// Mime type do arquivo.
"mimetype": "application/pdf",
// Tamanho do arquivo.
"filesize": 1729896,
// Id do registro que contêm o arquivo.
"id_file": "24fb33c0-1ded-34a6-9d27-cd34a10cb956",
// Hash do arquivo.
"uuid": "5c248ce5-56e6-44d1-bc2f-e5332380a9d6",
// Nome do arquivo.
"filename": "file_name.pdf"
}
Associar arquivo a documento
put {base}/doc/{id_doc}/{file_type_field}
Nota
O campo {file_type_field} é um campo do tipo arquivo que recece o “json_file” obtido na operação Inserir arquivo.
- Parâmetros
value: Conteúdo do “json_file”.
- Retorno
UPDATED
Recuperar metadados sobre o arquivo
Retorna metadados sobre o arquivo da {base} representado pelo {id_file}.
get /{base}/file/{id_file}
- Retorno
{
// Mime type do arquivo.
"mimetype": "application/pdf",
// Id do registro que contêm o arquivo.
"id_file": "24fb33c0-1ded-34a6-9d27-cd34a10cb956",
// Texto extraído do arquivo pelo LBConverter.
"filetext": "file text",
// Tamanho do arquivo.
"filesize": 1729896,
// URI download.
"download": "http://127.0.0.1/api/base/file/24fb33c0-1ded-34a6-9d27-cd34a10cb956/download",
// Nome do arquivo.
"filename": "file_name.pdf",
// Data da extração do conteúdo do arquivo em texto.
"dt_ext_text": "dd/mm/yyyy HH:mm:ss",
// Registro (doc) ao qual o arquivo está associado.
"id_doc": 10
}
Inserir Texto
Destina-se a armazenar o texto extraído do arquivo. Esse processo é feito automaticamente pelo LBConverter.
put {base}/file/{id}/text
- Parâmetros
filetext: Input/campo que recebe o texto extraído do arquivo.
- Retorno
Retorna UPDATED em caso de sucesso.
Baixar arquivo
Retorna o arquivo da {base} representado pelo {id_file}
get /{base}/file/{id_file}/download
- Parâmetros
Disposition – Define a forma como arquivo será baixado.
Attachment – Usar para baixar o arquivo automaticamente.
Inline – Usar para apresentar o arquivo no navegador/cliente http.
Ex:
http://127.0.0.1/api/{base}/file/{id_file}/download?disposition=attachment
Deletar arquivo
Destina-se a deletar arquivos conforme os modelos mais abaixo:
Modelo I
delete {base}/file?$$={"<parameter_key>":"<parameter_value>"}
Modelo II
delete {base}/file/{id_file}
Nota
Mais especificamente o modelo de uso I segue o seguinte exemplo…
http://host_name/api/base_name/file?$$={"literal":"id_doc is null"}
Ou seja, é o mesmo modelo que usamos para fazer queries nos registros do “tipo doc” associando-se os verbos (DELETE, GET…).
- Parâmetros
query:
?$$={"<parameter_key>":"<parameter_value>"}
Usar conforme demonstrado mais acima e conforme fazemos nos registros do “tipo doc” (rota “doc”).
id_file: UUID do registro do “tipo file”.
- Retorno
Para o modelo I
{
"success": <int_success_quantity>,
"failure": <int_failure_quantity>
}
Para o modelo II
DELETED
COLEÇÕES DE ARQUIVOS
Recuperar Arquivos
Retorna uma lista de arquivos existentes, de acordo com a pesquisa fornecida. Para mais detalhes veja o arquivo neo.Brlight – REST – Select.odt.
- $$: JSON de Pesquisa.
get /{base}/file
INDEX ERROR
Deleta uma coleção de objetos da base. Retorna a contagem de sucessos e falhas.
delete /_index_error
CONFIGURAR PESQUISA TEXTUAL
Configuração de Índice (Index)
POST - Criar
Cria uma configuração de índice.
POST http://<ip_or_name>/_txt_idx
Ex:
POST http://127.0.0.1/_txt_idx
- Parâmetros
Nome: cfg_idx_txt
Obrigatório: SIM
Modelo/Exemplo Valor:
{
"nm_idx": "bcocat",
"cfg_idx":
{
"settings":
{
"analysis":
{
"analyzer":
{
"case_insensitive_sort":
{
"tokenizer": "keyword",
"filter":
[
"lowercase"
]
},
"default":
{
"tokenizer": "standard",
"filter":
[
"lowercase",
"asciifolding"
]
},
"ngram_analyzer":
{
"tokenizer": "ngram_tokenizer",
"filter":
[
"lowercase",
"asciifolding"
],
"char_filter":
[
"alfanumeric_pattern"
]
},
"stemmer_analyzer":
{
"tokenizer": "standard",
"filter":
[
"lowercase",
"asciifolding",
"stemmer_pt_br"
]
},
"alfanumeric_analyzer":
{
"char_filter":
[
"alfanumeric_pattern"
],
"filter":
[
"lowercase",
"asciifolding"
],
"tokenizer": "standard"
}
},
"char_filter":
{
"alfanumeric_pattern":
{
"type": "pattern_replace",
"pattern": "[^a-zA-Z0-9]",
"replacement": ""
}
},
"tokenizer":
{
"ngram_tokenizer":
{
"type": "ngram",
"min_gram": "2",
"max_gram": "3",
"token_chars":
[
"digit",
"letter"
]
}
},
"filter":
{
"stemmer_pt_br":
{
"type": "stemmer",
"name": "brazilian"
}
}
}
}
},
"dt_crt_idx": "01/01/2000 00:00:00",
"dt_upt_idx": "01/01/2000 00:00:00",
"url_idx": "http://172.16.13.172:9200/bcocat2",
"actv_idx": true
}
Nota
Os campos dt_crt_idx, dt_upt_idx e actv_idx não são obrigatórios e serão ignorados no processo sendo tratados pelo servidor!
- Retorno (Modelo/Exemplo)
12
Nota
id do registro recém criado!
GET - Pesquisar
- Por id
Retorna o índice setado naquela URI.
GET http:///_txt_idx/
Ex:
GET http://127.0.0.1/_txt_idx/bcocat
- Retorno (Modelo/Exemplo)
{
"actv_idx": true,
"url_idx": "http://172.16.13.172:9200/bcocat",
"cfg_idx":
{
"settings":
{
"analysis":
{
"filter":
{
"stemmer_pt_br":
{
"type": "stemmer",
"name": "brazilian"
}
},
"char_filter":
{
"alfanumeric_pattern":
{
"pattern": "[^a-zA-Z0-9]",
"type": "pattern_replace",
"replacement": ""
}
},
"analyzer":
{
"default":
{
"filter":
[
"lowercase",
"asciifolding"
],
"tokenizer": "standard"
},
"ngram_analyzer":
{
"filter":
[
"lowercase",
"asciifolding"
],
"char_filter":
[
"alfanumeric_pattern"
],
"tokenizer": "ngram_tokenizer"
},
"case_insensitive_sort":
{
"filter":
[
"lowercase"
],
"tokenizer": "keyword"
},
"stemmer_analyzer":
{
"filter":
[
"lowercase",
"asciifolding",
"stemmer_pt_br"
],
"tokenizer": "standard"
},
"alfanumeric_analyzer":
{
"filter":
[
"lowercase",
"asciifolding"
],
"char_filter":
[
"alfanumeric_pattern"
],
"tokenizer": "standard"
}
},
"tokenizer":
{
"ngram_tokenizer":
{
"type": "ngram",
"token_chars":
[
"digit",
"letter"
],
"max_gram": "3",
"min_gram": "2"
}
}
}
},
"dt_crt_idx": "01/01/2000 00:00:00",
"nm_idx": "bcocat",
"dt_upt_idx": "01/01/2000 00:00:00"
}
PUT - Editar
Atualizar uma configuração de índice.
PUT http://<ip_or_name>/_txt_idx/<nm_idx>
Ex:
PUT http://127.0.0.1/_txt_idx/bcocat
- Parâmetros
Nome: cfg_idx_txt
Obrigatório: SIM
Modelo/Exemplo Valor:
{
"actv_idx": true,
"url_idx": "http://172.16.13.172:9200/bcocat",
"cfg_idx":
{
"settings":
{
"analysis":
{
"filter":
{
"stemmer_pt_br":
{
"type": "stemmer",
"name": "brazilian"
}
},
"char_filter":
{
"alfanumeric_pattern":
{
"pattern": "[^a-zA-Z0-9]",
"type": "pattern_replace",
"replacement": ""
}
},
"analyzer":
{
"default":
{
"filter":
[
"lowercase",
"asciifolding"
],
"tokenizer": "standard"
},
"ngram_analyzer":
{
"filter":
[
"lowercase",
"asciifolding"
],
"char_filter":
[
"alfanumeric_pattern"
],
"tokenizer": "ngram_tokenizer"
},
"case_insensitive_sort":
{
"filter":
[
"lowercase"
],
"tokenizer": "keyword"
},
"stemmer_analyzer":
{
"filter":
[
"lowercase",
"asciifolding",
"stemmer_pt_br"
],
"tokenizer": "standard"
},
"alfanumeric_analyzer":
{
"filter":
[
"lowercase",
"asciifolding"
],
"char_filter":
[
"alfanumeric_pattern"
],
"tokenizer": "standard"
}
},
"tokenizer":
{
"ngram_tokenizer":
{
"type": "ngram",
"token_chars":
[
"digit",
"letter"
],
"max_gram": "3",
"min_gram": "2"
}
}
}
}
},
"dt_crt_idx": "01/01/2000 00:00:00",
"nm_idx": "bcocat",
"dt_upt_idx": "01/01/2000 00:00:00"
}
Nota
Os campos dt_crt_idx e dt_upt_idx serão ignorados no processo sendo tratados pelo servidor!
- Retorno (Modelo/Exemplo)
UPDATED
DELETE - Deletar
Atualizar uma configuração de índice.
DELETE http://<ip_or_name>/_txt_idx/<nm_idx>
Ex:
DELETE http://127.0.0.1/_txt_idx/bcocat
- Retorno (Modelo/Exemplo)
DELETED
Configuração de Mapeamento (Mapping)
A configuração de mapping reside dentro da configuração de base. Para mais detalhes veja a seção Bases.
COMANDOS SQL
Enviar um comando SQL diretamente para o banco de dados PostgreSQL.
Request:
POST /sql
Content-Type: application/json
Body:
{
"commands": [ (comandos SQL) ]
}
- commands (array): uma lista de strings cada uma contendo uma query SQL a ser executada. Todas as queries serão executadas em uma só transação do banco, ou seja, se uma query retornar erro, todas as outras serão desfeitas (rollback).
A resposta vem na forma de uma array JSON podendo conter:
a) Comandos que retornam registros (SELECT):
{
"row_count": 2,
"rows":
[
{
"col1": "valor_1",
"col2": 1,
"col3" true
},
{
"col1": "valor_2",
"col2": 2,
"col3" false
}
]
}
- row_count (integer): número de registros
- rows (array): lista de registros em forma de objetos JSON
b) Comandos que não retornam registros (INSERT, DELETE, UPDATE…):
{
"success": (true | false)
}
- success (boolean): Se true, comando executado com sucesso. Se false, houve erro na execução do comando e todas as outras operações foram desfeitas (rollback).
Exemplo
Request:
POST /sql
Content-Type: application/json
{
"commands":
[
"SELECT id_base, name FROM lb_base WHERE name LIKE '%test%';",
"UPDATE lb_doc_api_test_delete SET dt_idx = NOW();"
]
}
Resposta:
[
{
"row_count": 4,
"rows":
[
{
"name": "api_test_delete",
"id_base": 255
},
{
"name": "client_lib_test",
"id_base": 134
},
{
"name": "dispatcher_test",
"id_base": 125
},
{
"name": "test_albums",
"id_base": 145
}
]
},
{
"success": true
}
]
BUSCA TEXTUAL SIMPLES (via ElasticSearch)
Realizar uma busca textual via ElasticSearch.
Opção 1: Buscar os mesmos termos em vários campos
Request:
POST /{base}/lbes
Content-Type: application/json
Body:
{
"query": "(TERMO1 AND TERMO2) OR TERMO3",
"search_fields": ["field_1", "field_2.field_2_1"],
"return_fields": ["field_1", "field_3", "field_4.field_4_2"],
"highlight":
{
"in_source": (true | false),
"pre_tags": ["<b>"],
"post_tags": ["</b>"],
(e outras aceitas pelo ES...)
},
"from": 0,
"size": 10,
"sort":
[
{"field1": "asc"},
{"field2": {"order": "asc", "mode": "min"}}
],
"raw_es_response": ( true | false )
}
- query (string): uma string contendo os termos a serem buscados. Aceita os operadores booleanos AND e OR, assim como parêntesis e ‘?’ como coringa de 1 (um) caracter.
- search_fields (array de strings, opcional, padrão [“_all”]): uma array contendo os campos nos quais os termos serão buscados
- return_fields (array de strings, opcional, padrão [“_all”]): uma array contendo os campos que serão retornados na resposta
- highlight (objeto, opcional): contém campos com opções sobre como “brilhar” os termos encontrados. Pode-se usar quaisquer opções aceitas pelo ElasticSearch, inclusive “pre-tags” e “post-tags”.
- in_source (booleano, opcional, padrão false): se true, as tags de brilho (ver pre-tags e post-tags abaixo) são colocadas dentro do resultado da busca; se false, os termos com as tags virão separadamente no campo “highlight” da responsa (padrão ES).
- pre-tags (array de strings, opcional, padrão [“”]): as strings enviadas nesta array serão colocadas antes de cada termo encontrado
- post-tags (array de strings, opcional, padrão [“”]): as strings enviadas nesta array serão colocadas após cada termo encontrado
- from (integer, opciona, padrão 0): valor de offset para paginação de resultados
- size (integer, opciona, padrão 10): número máximo de resultados para retornar
- sort (array de objetos, opcional): array contendo regras de ordenação dos resultados. Ver documentação do ES para detalhes sobre o formato.
- raw_es_reponse (booleano, opcional, padrão false): se true, a resposta será retornada no formato padrão do ES; se false, a resposta estará no formato simplificado do LBG
Response (padrão simplificado):
[
{
"score": 0.34564,
"id_doc": 11,
"data": (campos do 1o registro: todos ou apenas os marcados em "return_fields")
},
{
"score": 0.12312,
"id_doc": 15,
"data": (campos do 2o registro: todos ou apenas os marcados em "return_fields")
},
(...)
]
- score (float): score tf-idf do registro, quanto maior mais relevante é o registro para a busca
- data (object): objeto com campos do registro
Opção 2: Buscar termos diferentes em campos diferentes
Request:
POST /{base}/lbes
Content-Type: application/json
Body:
{
"query":
{
"field_1": "TERMO1 OR TERMO2",
"field_4.field_4_1": "TERMO3"
},
"return_fields": ["field_1", "field_3", "field_4.field_4_2"],
"highlight":
{
"in_source": (true | false),
"pre_tags": ["<b>"],
"post_tags": ["</b>"],
(e outras aceitas pelo ES...)
},
"from": 0,
"size": 10,
"sort":
[
{"field1": "asc"},
{"field2": {"order": "asc", "mode": "min"}}
],
"raw_es_response": ( true | false )
}
- query (objeto): um objeto representando a query a ser executada, com o nomes dos campos como chaves e os termo a serem buscados em cada campo como valores.
Ver Opção1 para detalhes sobre outros campos. O campo “search_fields” não deve ser usado neste tipo de busca, pois os campos já são indicados dentro do objeto “query”.
COMMAND
Versão do build
post /_command/version
Bases Memória
post /_command/base_mem
Limpar Bases Memória
post /_command/reset
Dados Server
post /_command/rest_url
Dados Banco
post /_command/db_url
Indexa campos
Indexa campos id_doc, dt_idx, dt_last_up
POST http://<ip_or_name>/_command/index_base
Ex:
POST http://127.0.0.1/_command/index_base
- Parâmetros
- Nome: base
- Modelo/Exemplo Valor: db_access
- Obrigatório: SIM


English