Documentação

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.

Definição

POST http://lightbase.bittest.cc:8008/lbg

Exemplo

$ curl http://lightbase.bittest.cc:8008/lbg \
   -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"
            }
}'

Recuperar Base

Retorna estrutura da base.

get /{base}

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.

get /{base}/doc

Alterar nó de Documentos

Altera o nó de cada documento encontrado na pesquisa.

put /{base}/doc
[
    {
        "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

[
   {
       "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.

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