92 lines
2.8 KiB
Python
92 lines
2.8 KiB
Python
from django_elasticsearch_dsl import Document, fields
|
|
from django_elasticsearch_dsl.registries import registry
|
|
from .models import DiarioOficial
|
|
|
|
@registry.register_document
|
|
class DiarioOficialDocument(Document):
|
|
tipo = fields.ObjectField(properties={
|
|
'nome': fields.TextField()
|
|
})
|
|
|
|
numero = fields.TextField()
|
|
data = fields.DateField()
|
|
link = fields.TextField()
|
|
|
|
# Campo para armazenar todas as páginas para busca
|
|
content = fields.TextField(
|
|
analyzer='pt_analyzer',
|
|
)
|
|
|
|
# Campo para armazenar páginas individualmente
|
|
pages = fields.NestedField(properties={
|
|
'number': fields.IntegerField(),
|
|
'content': fields.TextField(
|
|
analyzer='pt_analyzer',
|
|
)
|
|
})
|
|
|
|
class Index:
|
|
name = 'diarios_oficiais'
|
|
settings = {
|
|
'number_of_shards': 1,
|
|
'number_of_replicas': 0,
|
|
'analysis': {
|
|
'filter': {
|
|
'portuguese_stop': {
|
|
'type': 'stop',
|
|
'stopwords': '_portuguese_'
|
|
},
|
|
'portuguese_stemmer': {
|
|
'type': 'stemmer',
|
|
'language': 'portuguese'
|
|
},
|
|
'synonym_filter': {
|
|
'type': 'synonym',
|
|
'synonyms': [
|
|
'lei, legislação, norma',
|
|
'processo, procedimento, autos',
|
|
'contrato, acordo, convênio',
|
|
# Adicione mais sinônimos relevantes para o contexto legal
|
|
]
|
|
}
|
|
},
|
|
'analyzer': {
|
|
'pt_analyzer': {
|
|
'tokenizer': 'standard',
|
|
'filter': [
|
|
'lowercase',
|
|
'portuguese_stop',
|
|
'portuguese_stemmer',
|
|
'synonym_filter'
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
class Django:
|
|
model = DiarioOficial
|
|
fields = [
|
|
'id'
|
|
]
|
|
|
|
def prepare_tipo(self, instance):
|
|
if instance.tipo:
|
|
return {
|
|
'nome': instance.tipo.nome
|
|
}
|
|
return {}
|
|
|
|
def prepare_content(self, instance):
|
|
"""Concatena todo o conteúdo de todas as páginas em um único campo para busca"""
|
|
if instance.page_content:
|
|
return " ".join([page.get('content', '') for page in instance.page_content])
|
|
return ""
|
|
|
|
def prepare_pages(self, instance):
|
|
"""Prepara o campo de páginas individuais para exibição e destaque"""
|
|
if instance.page_content:
|
|
return instance.page_content
|
|
return []
|
|
|