Busca monitorados¶
Aviso
Em construção.
Realiza a busca textual nos dados dos processos monitorados, seus anexos e entidades (locais, pessoas, organizações) envolvidas.
Disponibilizamos três indices: processo_anexo
, processo
e entidade
.
Os critérios de pesquisa são especificados como JSON no corpo da solicitação HTTP POST. API responde de forma síncrona, também na sintaxe JSON.
A sintaxe de pesquisa é baseada na DSL padrão do Elasticsearch. Isso fornece um caminho de migração mais fácil em um estágio posterior do projeto, se a decisão de hospedar a pesquisa internamente por um cliente for feita. O código do cliente é programado para funcionar com uma API padrão do setor. Além disso, muitas das lições de criação de APIs de pesquisa e recuperação de conteúdo já fazem parte da API DSL / REST do Elasticsearch, portanto, elas estão sendo aproveitadas aqui e não são reinventadas.
Principais recursos de pesquisa:
- termos isolados ou de frases, expressões regulares, curingas (qualquer expressão Lucene)
- operadores booleanos (AND, OR, exclusão de termos, combinações complexas)
- filtrar em campos de metadados como “capitalSocial”, “localizacaoBairroDistrito”, etc
- pesquisas fuzzy / aproximadas (Levenshtein / edit distance algorithms)
- sugestão de termos similares (“Você quis dizer…” ou “mais assim…”). Veja alguns exemplos da API.
Os resultados da pesquisa podem ser retornados com:
- termo de pesquisa configurável realçar (tamanho, tag), mostrando o contexto em cada documento correspondente
- faceting/agregação/sumarização por qualquer campo
- As pesquisas podem ser feitas em qualquer tipo de campo: texto puro, numérico, data. O escopo de pesquisa (quais campos pesquisar) também é configurável. Qualquer campo dos documentos correspondentes (configuráveis por consulta) pode ser retornado junto com os resultados.
-
POST
https://op.digesto.com.br/api/proc_search/
(index)¶ Realiza busca textual com os parâmetros informados.
Exemplo de chamada:
O exemplo abaixo faz a busca pela palavra “genebra” dentro dos anexos dos processos monitorados pela
user_company
do usuário atual. Ele traz também agregações dos números de processos e entidades mencionadas nos resultados.A busca coloca peso 2 para o campo nome das partes em relação ao conteúdo (peso 1), retorna uma contagem (histograma) dos números de processos com resultados (para mostrar na tela à esquerda da busca por exemplo) e também com sugestão automática de termos parecidos.
POST https://op.digesto.com.br/api/proc_search/processo_anexo_181/_search HTTP/1.1 Content-Type: application/json { "from": 0, "size": 8, "query": { "multi_match": { "query": "genebra", "fuzziness" : "AUTO", "prefix_length" : 2, "fields": [ "partes^2", "conteudo" ], "operator": "and" } }, "aggs": { "Publicado em": { "date_histogram": { "field": "publicadoEm", "interval": "1M", "format": "MM/yyyy" } }, "Processo.Número do processo": { "nested": { "path": "processo" }, "aggs": { "Número do processo": { "terms": { "field": "processo.numero", "size": 12 } } } }, "Pessoas.Pessoas mencionadas": { "nested": { "path": "entities" }, "aggs": { "Pessoas mencionadas": { "terms": { "field": "entities.per", "size": 12 } } } }, "Locais.Locais mencionados": { "nested": { "path": "entities" }, "aggs": { "Locais mencionados": { "terms": { "field": "entities.loc", "size": 12 } } } } }, "highlight": { "pre_tags": [ "<code>" ], "post_tags": [ "</code>" ], "fields": { "conteudo": {}, "partes": {} } }, "suggest": { "text": "genebra", "simple_phrase": { "phrase": { "field": "conteudo", "size": 1, "direct_generator": [ { "field": "conteudo", "suggest_mode": "always" } ] } } } }
Exemplo de resposta:
HTTP/1.1 200 OK Content-Type: application/json { "took": 129, "timed_out": false, "_shards": { "total": 1, "successful": 1, "failed": 0 }, "hits": { "total": 4, "max_score": 0.043179974, "hits": [ { "_index": "processo_anexo", "_type": "processoAnexo", "_id": "15846257_1744", "_score": 0.043179974, "_source": { "comment": null, "user_company_id": 181, "proc_id": 1744, "processo": { "numeroAlternativo": null, "vara": 13, "classeNatureza": "CRIMINAL ESPECIALIZADA", "distribuicaoTipo": "DESCONHECIDA", "situacao": "ATIVO", "area": "Cível", "assuntoExtra": "\"Lavagem\" ou Ocultação de Bens, Direitos ou Valores Oriundos de Corrupção (Lei 9.613/1998, art. 1º, V)", "audiencias": null, "extinto": "false", "valor": 0, "alteradoEm": "2016-08-24T18:39:14", "foro": "CURITIBA", "situacao_situacaoID": 1, "sentencaData": null, "numero": "5039296-19.2015.4.04.7000", "comarca": "PR", "tribunalID": 11, "tribunal": "TRF4", "processoID": 95183390, "distribuicaoData": "2015-08-05", "arquivado": false, "classes": [], "acessos": "2016-08-24 19:55:26", "uf": "-", "criadoEm": "2016-07-01T20:58:18", "partes": [ { "cnpj": 3636198000192, "parteRelacaoID": 70, "advogados": [ { "nomeNormalizado": "PAULO ROBERTO GALVAO DE CARVALHO", "uf": "", "advogadoID": 1416992, "oab": "", "cnpjCpf": "" } ], "cpf": null, "nomeParteNormalizado": "MINISTERIO PUBLICO FEDERAL", "relacaoNormalizado": "AUTOR", "parteID": 69502, "documento": "03636198000192", "nomeParte": "MINISTERIO PUBLICO FEDERAL", "processoParteAdvogadoID": 551684429 }, { "cnpj": null, "parteRelacaoID": 304, "advogados": [ { "nomeNormalizado": "FERNANDA SILVA TELLES", "uf": "RJ", "advogadoID": 46045, "oab": "076427", "cnpjCpf": "" } ], "cpf": 219552711, "nomeParteNormalizado": "BERNARDO SCHILLER FREIBURGHAUS", "relacaoNormalizado": "REU", "parteID": 25693159, "documento": "219552711", "nomeParte": "BERNARDO SCHILLER FREIBURGHAUS", "processoParteAdvogadoID": 546084682 } ] }, "orgao": null, "alias": null, "publicadoEm": "2016-02-14T00:00:00", "user_creator_id": 205, "conteudo": "Poder Judiciario JUSTICA FEDERAL Secao Judiciaria do ...", "last_movimento_at": null, "user_custom": null, "citado_at": null, "dias_sem_andamento": null, "uf": null, "last_updated_at": null, "encerrado_at": null, "summary": null, "titulo": "Titulo do anexo", "entities": { "org": [ "PR", "Suica", "Grupo Odebrecht", "MPF" ], "per": [ "BERNARDO SCHILLER FREIBURGHAUS", "cooperacao", "Signatario", "Bernardo Schiller Freiburghaus", "Anita Garibaldi", "reus", "Curitiba Av", "fulcro", "reus executivos", "SERGIO FERNANDO MORO" ], "loc": [ "23.2015.4.04.7000", "Brasil", "Juiz", "Suica", "Genebra", "relacao", "Curitiba", "19.2015.4.04.7000" ] }, "status_monitor": 0, "procset_name": "LJ", "enderecoS3": "http://anexos.radaroficial.com.br/770edd64d28b3a09218e2040c131c0fa.html", "procset_id": 22, "distribuido_at": null, "tipoAnexo": 3, "fase": null } }, { "_index": "processo_anexo", "_type": "processoAnexo", "_id": "15846257_1644", "_score": 0.043179974, "_source": { "comment": null, "user_company_id": 181, "proc_id": 1644, "processo": { "numeroAlternativo": null, "vara": 13, "classeNatureza": "CRIMINAL ESPECIALIZADA", "distribuicaoTipo": "DESCONHECIDA", "situacao": "ATIVO", "area": "Cível", "assuntoExtra": "\"Lavagem\" ou Ocultação de Bens, Direitos ou Valores Oriundos de Corrupção (Lei 9.613/1998, art. 1º, V)", "audiencias": null, "extinto": "false", "valor": 0, "alteradoEm": "2016-08-24T18:39:14", "foro": "CURITIBA", "situacao_situacaoID": 1, "sentencaData": null, "numero": "5039296-19.2015.4.04.7000", "comarca": "PR", "tribunalID": 11, "tribunal": "TRF4", "processoID": 95183390, "distribuicaoData": "2015-08-05", "arquivado": false, "classes": [], "acessos": "2016-08-24 19:55:26", "uf": "-", "criadoEm": "2016-07-01T20:58:18", "partes": [ { "cnpj": 3636198000192, "parteRelacaoID": 70, "advogados": [ { "nomeNormalizado": "PAULO ROBERTO GALVAO DE CARVALHO", "uf": "", "advogadoID": 1416992, "oab": "", "cnpjCpf": "" }, { "nomeNormalizado": "JERUSA BURMANN VIECILI", "uf": "", "advogadoID": 1575450, "oab": "RS054789", "cnpjCpf": "" } ], "cpf": null, "nomeParteNormalizado": "MINISTERIO PUBLICO FEDERAL", "relacaoNormalizado": "AUTOR", "parteID": 69502, "documento": "03636198000192", "nomeParte": "MINISTERIO PUBLICO FEDERAL", "processoParteAdvogadoID": 551684429 }, { "cnpj": null, "parteRelacaoID": 304, "advogados": [ { "nomeNormalizado": "FERNANDA SILVA TELLES", "uf": "RJ", "advogadoID": 46045, "oab": "076427", "cnpjCpf": "" } ], "cpf": 219552711, "nomeParteNormalizado": "BERNARDO SCHILLER FREIBURGHAUS", "relacaoNormalizado": "REU", "parteID": 25693159, "documento": "219552711", "nomeParte": "BERNARDO SCHILLER FREIBURGHAUS", "processoParteAdvogadoID": 546084682 } ] }, "orgao": null, "alias": null, "publicadoEm": "2016-02-14T00:00:00", "user_creator_id": 205, "conteudo": "Poder Judiciario JUSTICA FEDERAL Secao Judiciaria do Parana 13a ...", "last_movimento_at": null, "user_custom": null, "citado_at": null, "dias_sem_andamento": null, "titulo": "Titulo do anexo", "uf": null, "last_updated_at": null, "encerrado_at": null, "summary": null, "entities": { "org": [ "PR", "Suica", "Grupo Odebrecht", "MPF" ], "per": [ "BERNARDO SCHILLER FREIBURGHAUS", "cooperacao", "Signatario", "Bernardo Schiller Freiburghaus", "Anita Garibaldi", "reus", "Curitiba Av", "fulcro", "reus executivos", "SERGIO FERNANDO MORO" ], "loc": [ "23.2015.4.04.7000", "Brasil", "Juiz", "Suica", "Genebra", "relacao", "Curitiba", "19.2015.4.04.7000" ] }, "status_monitor": 0, "procset_name": "LJ", "enderecoS3": "http://anexos.radaroficial.com.br/770edd64d28b3a09218e2040c131c0fa.html", "procset_id": 22, "distribuido_at": null, "tipoAnexo": 3, "fase": null } } ] }, "aggregations": { "processo_agg": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ { "key": "19.2015.4.04.7000", "doc_count": 4 }, { "key": "5039296", "doc_count": 4 } ] } }, "suggest": { "simple_phrase": [ { "text": "genebra", "offset": 0, "length": 7, "options": [] } ] } }
Parameters: - index – nome do índice onde a busca será realizada
Request Headers: - Authorization – token da API. Ver Autenticação.
Response Headers: - Content-Type –
application/json
Campos dos documentos indexados¶
Para o tipo processoAnexo
, disponibilizamos os seguintes campos:
- processo: são os dados completos do processo judicial associado ao anexo
- conteudo: texto puro do anexo
- entities: lista de entidades extraídas do texto do anexo. org=organizações, per=pessoas, loc=locais
- enderecoS3: URL onde o anexo original pode ser consultado ou baixado
Exemplos de consultas¶
Quantidade de processos por tribunal¶
POST https://op.digesto.com.br/api/proc_search/processo_181/_search HTTP/1.1 Content-Type: application/json { "size": 0, "aggs": { "tribunais": { "terms": { "field": "tribunal", "size": 12 } } } }
Quantidade de processos por data de distribuição¶
POST https://op.digesto.com.br/api/proc_search/processo_181/_search HTTP/1.1 Content-Type: application/json { "size": 0, "aggs": { "by_month": { "date_histogram": { "field": "distribuicaoData", "interval": "month", "format": "yyyy-MM" } } } }
Média de anexos por processo¶
POST https://op.digesto.com.br/api/proc_search/processo_181/_search HTTP/1.1 Content-Type: application/json { "size": 0, "aggs" : { "avg_anexos" : { "avg" : { "field" : "num_anexos" } } } }
Histograma da data de publicação dos anexos dos processos¶
POST https://op.digesto.com.br/api/proc_search/processo_181/_search HTTP/1.1 Content-Type: application/json { "size": 0, "aggs" : { "articles_over_time" : { "date_histogram" : { "field" : "publicadoEm", "interval" : "month" } } } }
Histograma da data de distribuição dos processos com anexos¶
POST https://op.digesto.com.br/api/proc_search/processo_181/_search HTTP/1.1 Content-Type: application/json { "size" : 0, "aggs": { "processos": { "nested": { "path": "processo" }, "aggs": { "by_month": { "date_histogram": { "field": "processo.distribuicaoData", "interval": "month", "format": "yyyy-MM" } } } } } }
Histograma da data de publicação dos anexos que mencionem uma determinada pessoa¶
POST https://op.digesto.com.br/api/proc_search/processo_181/_search HTTP/1.1 Content-Type: application/json { "query": { "nested": { "path": "entities", "query": { "term": { "entities.per": "ARMANDO FURLAN" } } } }, "size": 0, "aggs": { "articles_over_time": { "date_histogram": { "field": "publicadoEm", "interval": "month" } } } }
Documento aleatório num indice¶
Basta variar valor do campo seed
.
POST https://op.digesto.com.br/api/proc_search/processo_181/_search HTTP/1.1 Content-Type: application/json { "size": 1, "query": { "function_score": { "functions": [ { "random_score": { "seed": "1477072619038" } } ] } } }
Total de anexos de processos¶
GET https://op.digesto.com.br/api/proc_search/processo_anexo_181/processo_anexo/_count HTTP/1.1
Total de processos indexados¶
GET https://op.digesto.com.br/api/proc_search/processo_181/processo/_count HTTP/1.1
Processos mais comuns e pessoas mais citadas¶
Específicamos duas agregações. É possivel também passar um elemento query
para restringir o universo
de anexos/processos considerados.
POST https://op.digesto.com.br/api/proc_search/processo_181/_search HTTP/1.1 Content-Type: application/json { "size" : 0, "aggs": { "processo_agg": { "nested": { "path": "processo" }, "aggs": { "numeros": { "terms": { "field": "processo.numero", "size": 12 } } } }, "person_agg": { "nested": { "path": "entities" }, "aggs": { "pers": { "terms": { "field": "entities.per", "size": 12 } } } } } }
Todos os anexos de um processo¶
POST https://op.digesto.com.br/api/proc_search/processo_anexo_181/_search HTTP/1.1 Content-Type: application/json { "query": { "nested": { "path": "processo", "query": { "term": { "processo.processoID": 98908234 } } } } }
Buscar texto dentro dos anexos de um processo específico¶
POST https://op.digesto.com.br/api/proc_search/processo_181/_search HTTP/1.1 Content-Type: application/json { "query": { "bool": { "must": { "multi_match": { "query": "genebra", "fields": [ "partes^2", "conteudo" ], "operator": "and" } }, "filter": { "nested": { "path": "processo", "query": { "term": { "processo.processoID": 98908234 } } } } } } }
Buscar texto dentro dos anexos publicados em uma faixa de datas¶
POST https://op.digesto.com.br/api/proc_search/processo_anexo_181/_search HTTP/1.1 Content-Type: application/json { "query": { "bool": { "must": [ { "multi_match": { "query": "genebral", "fields": [ "partes^2", "conteudo" ], "operator": "and" } }, { "range": { "publicadoEm": { "from": "2015-10-20", "to": "2015-10-30" } } } ] } } }
Ordenando resultados por diversos critérios¶
Basta acrescentar o campo sort
conforme exemplo abaixo, no mesmo nível do from
e size
.
Veja mais na documentação do Elasticsearch.
"sort" : [
{ "processo.distribuicaoData" : "desc" },
"_score"
],