adiciona o aplicativo de diarios
This commit is contained in:
67
diarios/documents.py
Normal file
67
diarios/documents.py
Normal file
@ -0,0 +1,67 @@
|
||||
from django_elasticsearch_dsl import Document, fields
|
||||
from django_elasticsearch_dsl.registries import registry
|
||||
from .models import DiarioOficial
|
||||
|
||||
|
||||
@registry.register_document
|
||||
class DiarioOficialDocument(Document):
|
||||
numero = fields.KeywordField()
|
||||
data = fields.DateField()
|
||||
link = fields.KeywordField()
|
||||
tipo = fields.ObjectField(properties={"nome": fields.KeywordField()})
|
||||
|
||||
# Campo para páginas
|
||||
paginas = fields.NestedField(
|
||||
properties={
|
||||
"id": fields.IntegerField(),
|
||||
"numero": fields.IntegerField(),
|
||||
"conteudo": fields.TextField(
|
||||
analyzer="custom_portuguese",
|
||||
fields={
|
||||
"keyword": fields.KeywordField(),
|
||||
"search": fields.TextField(analyzer="custom_portuguese"),
|
||||
},
|
||||
),
|
||||
}
|
||||
)
|
||||
|
||||
class Index:
|
||||
name = "diario_oficial"
|
||||
settings = {
|
||||
"number_of_shards": 1,
|
||||
"number_of_replicas": 0,
|
||||
"analysis": {
|
||||
"analyzer": {
|
||||
"custom_portuguese": {
|
||||
"type": "custom",
|
||||
"tokenizer": "standard",
|
||||
"filter": [
|
||||
"lowercase",
|
||||
"asciifolding",
|
||||
"portuguese_stop",
|
||||
],
|
||||
}
|
||||
},
|
||||
"filter": {
|
||||
"portuguese_stop": {"type": "stop", "stopwords": "_portuguese_"},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
class Django:
|
||||
model = DiarioOficial
|
||||
fields = ["id"]
|
||||
|
||||
def prepare_tipo(self, instance):
|
||||
return {"nome": instance.tipo.nome if instance.tipo else "Sem Tipo"}
|
||||
|
||||
def prepare_link(self, instance):
|
||||
return instance.link or ""
|
||||
|
||||
def prepare_paginas(self, instance):
|
||||
# Preparar páginas ordenadas
|
||||
paginas = instance.paginas.all().order_by("numero")
|
||||
return [
|
||||
{"id": pagina.id, "numero": pagina.numero, "conteudo": pagina.conteudo}
|
||||
for pagina in paginas
|
||||
]
|
||||
Reference in New Issue
Block a user