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