Búsqueda
AthentoSE permite realizar búsquedas complejas sobre los ficheros que se encuentran en la plataforma. Para realizar dichas búsquedas, es necesario definir una estructura de grupos y reglas, las cuales definirán el filtro que se aplicará sobre un conjunto de ficheros.
Las búsquedas pueden realizarse sobre los documentos que eliminados o no eliminados usando, para la búsqueda sobre los eliminados, la cláusula ecm:isTrashed
con valor true
o 1
. En la instanciación del motor de búsqueda será necesario indicar el atributo (opcional con valor por defecto a False
) removed
encargado de discriminar internamente.
Ejecución
user = User.objects.get(username="<username>") filters = { ... } fils.advanced_search(user, filters)
Estructura de los filtros
La estructura de los filtros es la misma que se aplica en la búsqueda usando el ORM de Django.
La estructura de un filtro se compone de grupos de reglas unificado por una conjunción y reglas.
Ejemplo de filtro:
{ "AND": [ # Grupo inicial A (Conjunto de reglas unidas por la conjuncion "AND") { # Regla A1 en grupo A "type": "serie", "schema": { "value": ["123-123-213", "321-321-321"] } }, { # Regla A2 en grupo A "type": "doctype", "schema": { "value": ["123-123-123", "321-321-321"] } }, { # Regla A3 en grupo A (otro grupo, B) "AND": [ # Grupo B (Conjunto de reglas unidas por la conjunción "AND") { # Regla B1 "type": "metadata", "schema": { "uuid": "123-123-123", "value": ["myValueA", "myValueB"], "lookup_type": "contains", "negate": False } }, { # Regla B2 "type": "metadata", "schema": { "uuid": "321-321-321", "value": ["myValue2A", "myValue2B"], "lookup_type": "contains", "negate": False } }, { # Regla B3 en grupo B "OR": [ # Grupo C (Conjunto de reglas unidas por la conjunción "OR") { # Regla C1 "type": "metadata", "schema": { "uuid": "111-111-111", "value": ["myValue111A", "myValue111B"], "lookup_type": "contains", "negate": False } }, { # Regla C2 "type": "metadata", "schema": { "uuid": "222-222-222", "value": ["myValue222A", "myValue222B"], "lookup_type": "contains", "negate": False } } ] } ] } ] }
Grupos
Los grupos son un conjunto de reglas unidas por una conjunción. Las conjunciones pueden ser AND
or OR
.
En el ejemplo de filtro anterior, podemos encontrar tres grupos (A, B y C).
Grupo A:
Es el grupo inicial que contiene todas las reglas.
Siempre que existan más de una regla, se aplicará un grupo.
Grupo B:
El grupo B es un conjunto de reglas "AND", el cual tambien contiene una regla que es el Grupo C.
{ "AND": [ # Grupo B (Conjunto de reglas unidas por la conjunción "AND") { # Regla B1 "type": "metadata", "schema": { "uuid": "123-123-123", "value": ["myValueA", "myValueB"], "lookup_type": "contains", "negate": False } }, { # Regla B2 "type": "metadata", "schema": { "uuid": "321-321-321", "value": ["myValue2A", "myValue2B"], "lookup_type": "contains", "negate": False } }, { # Regla B3 en grupo B "OR": [ # Grupo C (Conjunto de reglas unidas por la conjunción "OR") { # Regla C1 "type": "metadata", "schema": { "uuid": "111-111-111", "value": ["myValue111A", "myValue111B"], "lookup_type": "contains", "negate": False } }, { # Regla C2 "type": "metadata", "schema": { "uuid": "222-222-222", "value": ["myValue222A", "myValue222B"], "lookup_type": "contains", "negate": False } } ] } ] }
Grupo C:
El grupo C es un conjunto de reglas "OR":
{ "OR": [ # Grupo C (Conjunto de reglas unidas por la conjunción "OR") { # Regla C1 "type": "metadato", "schema": { "uuid": "111-111-111", "value": ["myValue111A", "myValue111B"], "lookup_type": "contains", "negate": False } }, { # Regla C2 "type": "metadato", "schema": { "uuid": "222-222-222", "value": ["myValue222A", "myValue222B"], "lookup_type": "contains", "negate": False } } ] }
Reglas
Una regla es un diccionario clave/valor, el cual se usará para definir el filtro. Existen muchos tipos de reglas con diferentes configuraciones:
Filtros ORM
Filtrar por serie
El filtro por series permite filtrar por una serie o múltiples.
{"type": "serie", "schema": {"value": ["123-123-213", "321-321-321"]}}
Donde:
key | Value |
---|---|
type | serie |
schema[value] | Lista de UUIDs, tanto para un UUID o múltiples. En el caso de múltiple, se aplicará un OR |
Ejemplo:
{"type": "serie", "schema": {"value": ["87c217f9-03b4-499b-979f-e56f0b228b7c"]}} { "type": "serie", "schema": { "value": ["87c217f9-03b4-499b-979f-e56f0b228b7c", "656ccfc3-cd14-422b-9a61-ac051e740824"] } }
Filtrar por tipo documental
El filtro por tipo documental permite filtrar por un tipo documental o múltiples.
{"type": "doctype", "schema": {"value": ["123-123-123", "321-321-321"]}}
Donde:
key | Value |
---|---|
type | serie |
schema[value] | Lista de UUIDs, tanto para un UUID o múltiples. En el caso de múltiple, se aplicará un OR |
Ejemplo:
{"type": "doctype", "schema": {"value": ["8a066e45-da4f-45fc-9bf0-9686f616ea5f"]}} { "type": "doctype", "schema": { "value": ["8a066e45-da4f-45fc-9bf0-9686f616ea5f", "9686f616ea5f-da4f-45fc-9bf0-9686f616ea5f-8a066e45"] } }
Filtrar por UUID
El filtro por UUID, permite filtrar directamente por el UUID de un documento o múltiples.
{"type": "uuid", "schema": {"value": ["f9f343d2-d419-4819-906f-03d7acdc3695"]}}
Donde:
key | Value |
---|---|
type | serie |
schema[value] | Lista de UUIDs, tanto para un UUID o múltiples. En el caso de múltiple, se aplicará un OR |
Ejemplo:
{"type": "uuid", "schema": {"value": ["f9f343d2-d419-4819-906f-03d7acdc3695"]}} { "type": "uuid", "schema": { "value": ["f9f343d2-d419-4819-906f-03d7acdc3695", "9467552f-affb-473c-99d9-348ee0a6cecb"] } }
Filtrar por autor
El filtro por Autor, permite filtrar directamente por el uuid
de un usuario o múltiples.
{"type": "author", "schema": {"value": ["user1-uuid", "user2-uuid"]}}
Donde:
key | Value |
---|---|
type | serie |
schema[value] | Lista de uuid , tanto para un author o múltiples. En el caso de múltiple, se aplicará un OR |
Ejemplo:
{"type": "author", "schema": {"value": ["123-321-123"]}} { "type": "author", "schema": { "value": ["123-321-123, 345-543-345"] } }
Filtrar por estado del documento
El filtro por estado de un documento, permite filtrar directamente por uno o múltiples.
{"type": "state", "schema": {"value": ["pending"]}}
Donde:
key | Value |
---|---|
type | serie |
schema[value] | Lista de state , tanto para un estado o múltiples. En el caso de múltiple, se aplicará un OR |
Ejemplo:
{"type": "state", "schema": {"value": ["pending"]}} { "type": "author", "schema": { "value": ["pending", "finished"] } }
Filtrar por estado del ciclo de vida del documento
El filtro por estado del ciclo de vida de un documento, permite filtrar directamente por uno o múltiples.
{"type": "lifecycle_state", "schema": {"value": ["123-123-123"]}}
Donde:
key | Value |
---|---|
type | serie |
schema[value] | Lista de UUIDs de estados del ciclo de vida, tanto para un estado o múltiples. En el caso de múltiple, se aplicará un OR |
Ejemplo:
{"type": "lifecycle_state", "schema": {"value": ["087444a6-6de2-4d4c-8a45-f471684542bc"]}} { "type": "lifecycle_state", "schema": { "value": ["087444a6-6de2-4d4c-8a45-f471684542bc", "843dfd69-57a0-49ad-99e2-b3c2d177a357"] } }
Filtrar por fecha de creación
El filtro por fecha de creación, permite filtras usando un operador, una expresion o un valor (fecha).
OPERADOR
{"type": "creation_date", "schema": {"value": "22-4-2020", "condition": "<"}}
Donde:
Key | Value |
---|---|
type | creation_date |
date | Fecha por la cual filtrar |
operator | Operador que se aplicará para realizar el filtro ('<', '<=', '==', 'LIKE', '>=', '>' ) |
EXPRESIÓN
{"type": "creation_date", "schema": {"condition": "last_day", "value": 2}}
Donde:
key | Value |
---|---|
type | creation_date |
schema[condition] | Expresion por la cual filtrar ( 'current_month', 'current_year', 'current_day', 'last_month', 'last_year', 'last_day' ) |
schema[value] | Valor restante como delta que se aplicará en los casos de last_* ('last_month', 'last_year', 'last_day' ) |
RANGO
{"type": "creation_date", "schema":{"condition": "range", "start_date": "21-04-2020", "end_date": "23-04-2020"}}
Donde:
key | Value |
---|---|
type | creation_date |
schema[conditon] | range |
schema[start_date] | Fecha de inicio en el rango |
schema[end_date] | Fecha de fin en el rango |
Filtrar por fecha de modificación
El filtro por fecha de modificación, permite filtras usando un operador, una expresion o un valor (fecha).
OPERADOR
{"type": "modification_date", "schema": {"condition": ">", "value": "10-10-1010"}}
Donde:
key | Value |
---|---|
type | modification_date |
schema[conditon] | Operador que se aplicará para realizar el filtro ( '<', '<=', '==', 'LIKE', '>=', '>' ) |
schema[value] | Fecha por la cual filtrar |
EXPRESIÓN
{"type": "modification_date", "schema": {"condition": "last_day", "value": 2}}
Donde:
key | Value |
---|---|
type | modification_date |
schema[conditon] | Expresión por la cual filtrar ( 'current_month', 'current_year', 'current_day', 'last_month', 'last_year', 'last_day' ) |
schema[value] | Valor restante como delta que se aplicará en los casos de last_* ('last_month', 'last_year', 'last_day' ) |
RANGO
{"type": "modification_date", "schema":{"condition": "range", "start_date": "21-04-2020", "end_date": "23-04-2020"}}
Donde:
key | Value |
---|---|
type | modification_date |
schema[conditon] | range |
schema[start_date] | Fecha de inicio en el rango |
schema[end_date] | Fecha de fin en el rango |
Filtrar por número de páginas
El filtro por número de páginas, permite filtrar directamente por el número o por un rango.
{"type": "num_pages", "schema": {"condition": ">", "value": 10}}
Donde:
key | Value |
---|---|
type | num_pages |
schema[conditon] | Operador que se aplicará para realizar el filtro ('<', '<=', '==', 'LIKE', '>=', '>' ) |
schema[value] | Número de páginas |
RANGO
{"type": "num_pages", "schema": {"condition": "range", "start_number": 2, "end_number": 10}}
Donde:
key | Value |
---|---|
type | num_pages |
schema[condition] | range |
schema[start_number] | Número de página de inicio del rango |
schema[end_number] | Número de páginas de final del rango |
Filtrar por nombre del fichero
El filtro por el nombre de fichero, permite filtrar por contenido del nombre, exacto, insensitivo, etc.
{"type": "filename", "schema": {"value": "Mi fichero", "lookup_type": "contains"}}
Donde:
key | Value |
---|---|
type | filename |
schema[value] | Valor por el cual buscar |
schema[lookup_type] | Forma con la cual se buscará en la cadena ('exact', 'iexact', 'contains', 'icontains', 'startswith', 'istartswith', 'endswith', 'iendswith' ) |
Filtar globalmente
El filtro global, permite realizar una búsqueda global, que es una búsqueda en filename o valor de metadato (texto).
{"type": "text", "schema": {"value": "Campo1"}}
Donde:
key | Value |
---|---|
type | text |
schema[value] | Valor por el cual buscar |
Filtrar por tipo de "source"
El filtrado por tipo de "source", nos permite filtrar ficheros en base a como fue su creación.
{"type": "source", "schema": {"value": "public_web"}}
Donde:
key | Value |
---|---|
type | source |
schema[value] | Valor por el cual buscar. Ver la variable SOURCE_TYPES |
Filtrar por extension
{"type": "extension", "schema": {"value": "pdf"}}
Donde:
key | Value |
---|---|
type | extension |
schema[value] | Valor de la extension por el cual buscar. |
Filtrar por metadatos
El filtrado por metadato, nos permite filtrar por el valor que contiene un metadato. Los metadatos pueden ser de diferente tipo. Por lo tanto existen múltiples formas de filtrado.
EL METADATO TIENE O NO VALOR
Nos permite filtrar por metadatos con valor o sin valor.
{"type": "metadata", "schema": {"uuid": "123-123-123", "value":""}}
Donde:
key | Value |
---|---|
type | source |
schema[value] | "" (string vacio) para filtar por metadatos sin valor |
schema[uuid] | UUID del tipo de metadato que define el metadato |
Ejemplo:
{"type": "metadata", "schema": {"uuid": "8ea1da32-883c-4f5b-8d98-efa9e2d302ef", "value": ""}}
METADATO DE TIPO TEXTO
Filtrar por el valor de un metadato de tipo texto.
{"type": "metadata", "schema": {"uuid": "123-123-123", "value": ["myValueA", "myValueB"], "lookup_type": "contains"}}
Donde:
key | Value |
---|---|
type | metadata |
schema[value] | Lista de valores, tanto para un valor o múltiples. En el caso de múltiple, se aplicará un OR |
schema[uuid] | UUID del tipo de metadato que define el metadato |
schema[lookup_type] | Forma con la cual se buscará en la cadena ('exact', 'iexact', 'contains', 'icontains', 'startswith', 'istartswith', 'endswith', 'iendswith' ) |
Ejemplo:
{"type": "metadata", "schema": {"uuid": "df8a0cf4-3a47-4649-a2d4-aaaded3af6e8", "value": ["Campo11"], "lookup_type": "exact"}}
METADATO DE TIPO FECHA
El filtro por metadato de tipo fecha, permite filtrar usando un operador, una expresion o un valor (fecha).
- Operador
{"type": "metadata", "schema": {"uuid": "123-123-123", "condition": ">=", "value": "23-04-2020"}}
Donde:
key | Value |
---|---|
type | metadata |
schema[value] | Fecha por la cual se filtrará |
schema[uuid] | UUID del tipo de metadato que define el metadato |
schema[condition] | Operador que se aplicará para realizar el filtro ('<', '<=', '==', 'LIKE', '>=', '>' ) |
Ejemplo:
{"type": "metadata", "schema": {"uuid": "70f5fb51-392c-44bd-abe4-869260ab3d20", "condition": "==", "value": "23-04-2020"}} {"type": "metadata", "schema": {"uuid": "8ea1da32-883c-4f5b-8d98-efa9e2d302ef", "condition": "==", "value": "21-04-2020 13:00:00"}}
- Expresión
{"type": "metadata", "schema": {"uuid": "123-123-123", "condition": "last_day", "value": 1}}
Donde:
key | Value |
---|---|
type | metadata |
schema[value] | Valor restante como delta que se aplicará en los casos de last_* ('last_month', 'last_year', 'last_day' ) |
schema[uuid] | UUID del tipo de metadato que define el metadato |
schema[condition] | Expresión por la cual filtrar ('current_month', 'current_year', 'current_day', 'last_month', 'last_year', 'last_day' ) |
Ejemplo:
{"type": "metadata", "schema": {"uuid": "70f5fb51-392c-44bd-abe4-869260ab3d20", "condition": "last_day", "value": 1}}
- Rango
{"type": "metadata", "schema": {"uuid": "123-123-123", "condition": "range", "start_date": "23-04-2020", "end_date": "25-04-2020"}}
Donde:
key | Value |
---|---|
type | metadata |
schema[start_date] | Fecha de inicio en el rango |
schema[end_date] | Fecha de fin en el rango |
schema[uuid] | UUID del tipo de metadato que define el metadato |
schema[condition] | range |
METADATO DE TIPO FICHERO (NO IMPLEMENTADO.)
Permite filtrar metadatos de tipo fichero, por el valor de un UUID de ficheros.
{"type": "metadata", "schema": {"uuid": "123-123-123", "value": ["111-222-333"]}}
Donde:
key | Value |
---|---|
type | metadata |
schema[value] | Lista de UUIDs de ficheros, tanto para un UUID o múltiples. En el caso de múltiple, se aplicará un OR |
schema[uuid] | UUID del tipo de metadato que define el metadato |
Ejemplo:
{"type": "metadata", "schema": {"uuid": "4c76c07b-ddd0-48f8-bf1e-424cfc2be647", "value": ["0abee75b-29ed-45e9-a6a9-2d1452c47412"]}}
METADATO DE TIPO CHOICE O MASTERTABLE
Este filtro permite filtrar por el valor de un metadato de tipo choice o mastertable
{"type": "metadata", "schema": {"uuid": "123-123-123", "value": ["01", "02"], "lookup_type": "exact"}}
Donde:
key | Value |
---|---|
type | metadata |
schema[value] | Lista de valores (keys), tanto para un valor o múltiples. En el caso de múltiple, se aplicará un OR |
schema[uuid] | UUID del tipo de metadato que define el metadato |
schema[look_type] | Forma con la cual se buscará en la cadena ('exact', 'iexact', 'contains', 'icontains', 'startswith', 'istartswith', 'endswith', 'iendswith' ) |
Ejemplo:
{"type": "metadata", "schema": {"uuid": "e4e477de-e636-48fa-aafd-3541258d835a", "value": ["0001", "0513"], "lookup_type": "exact"}}
METADATO DE TIPO USUARIO
Permite filtrar por los metadatos que son de tipo usuario.
{"type": "metadata", "schema": {"uuid": "123-123-123", "value": ["username1", "username2"]}}
Donde:
key | Value |
---|---|
type | metadata |
schema[value] | Lista de usernames , tanto para un valor o múltiples. En el caso de múltiple, se aplicará un OR |
schema[uuid] | UUID del tipo de metadato que define el metadato |
Ejemplo:
{"type": "metadata", "schema": {"uuid": "123-123-123", "value": ["mrp@athento.com", "ari@athento.com"]}}
METADATO DE TIPO GRUPO (NO IMPLEMENTADO.)
Permite filtrar por los metadatos de tipo grupo.
{"type": "metadata", "schema": {"uuid": "123-123-123", "value": ["111-222-333", "333-222-111"]}}
Donde:
key | Value |
---|---|
type | metadata |
schema[value] | Lista de UUIDs, tanto para un UUID o múltiples. En el caso de múltiple, se aplicará un OR |
schema[uuid] | UUID del tipo de metadato que define el metadato |
Ejemplo:
{"type": "metadata", "schema": {"uuid": "65642352-c50f-4726-91b1-085908022944", "value": ["1d3d57f6-bf3c-4a58-9ce7-c3b18e08f792", "a1887603-affc-4a88-98ba-b23cacd1ca1d"]}}
METADATO DE TIPO NUMBER
Permite filtrar por los metadatos de tipo number.
{"type": "metadata", "schema": {"uuid": "123-123-123", "value": 1000, "condition": ">="}}
Donde:
key | Value |
---|---|
type | metadata |
schema[value] | Lista de UUIDs, tanto para un UUID o múltiples. En el caso de múltiple, se aplicará un OR |
schema[uuid] | UUID del tipo de metadato que define el metadato |
schema[condition] | Es el operador que establece la condición del filtrado |
Ejemplo:
{"type": "metadata", "schema": {"uuid": "65642352-c50f-4726-91b1-085908022944", "value": 1000, "condition": ">="}}
Comentarios
0 comentarios
Inicie sesión para dejar un comentario.