예제 #1
0
        //public List<String> RetornaPrincipaisTermosNoticias(int idEmpresa, DateTime dtInicial, DateTime dtFinal)
        //{

        //    var db = new ZBD.Model.zeengEntities();

        //    string dataInicial = dtInicial.ToString("yyyy-MM-dd");
        //    string dataFim = dtFinal.ToString("yyyy-MM-dd");

        //    var lista = (from termo in db.noticia_termos
        //                 join noticia in db.noticias on termo.idnoticia equals noticia.idnoticia
        //                 join noticiaEmpresa in db.noticias_empresa on noticia.idnoticia equals noticiaEmpresa.idnoticia
        //                 where noticiaEmpresa.idempresa == idEmpresa &&
        //                 noticia.datapublicacao >= dtInicial &&
        //                 noticia.datapublicacao <= dtFinal
        //                 orderby termo.frequencia descending
        //                 select termo.termo).ToList();

        //    return lista;
        //}

        public List <ZRN.Graficos.TagCloud.Termo> RetornaPrincipaisTermosNoticias(FiltroNoticiasEmpresa filtro)
        {
            filtro.fontes = filtro.fontes == null || filtro.fontes.Count == 0 ? new List <int>()
            {
            } : filtro.fontes;

            var node     = new Uri(_servidorElastic);
            var settings = new ConnectionSettings(node);

            settings.DisableDirectStreaming(true);
            settings.DefaultIndex(_indexElastic + "noticias");

            var client = new ElasticClient(settings);

            var response = client.Search <NoticiasElastic.NoticiaElastic>(s => s
                                                                          .Source(f => f.Includes(i => i.Field("idnoticia")))
                                                                          .Size(10000)
                                                                          .Query(q =>

                                                                                 q.Match(m => m.Field("empresas.idempresa").Query(filtro.idEmpresa.ToString())) &&
                                                                                 (
                                                                                     q.MultiMatch(m => m
                                                                                                  .Fields(f => f.Field("titulo").Field("subtitulo").Field("conteudo"))
                                                                                                  .Query(filtro.expressao)
                                                                                                  .Operator(Operator.And)
                                                                                                  )
                                                                                 ) &&
                                                                                 q.Terms(p => p.Field(f => f.idfonte).Terms(filtro.fontes)) &&
                                                                                 q.DateRange(d => d
                                                                                             .Field(f => f.datapublicacao)
                                                                                             .GreaterThanOrEquals(string.Format("{0:dd/MM/yy HH:mm:ss}", filtro.dataInicial))
                                                                                             .LessThanOrEquals(string.Format("{0:dd/MM/yy HH:mm:ss}", filtro.dataFinal))
                                                                                             )
                                                                                 )
                                                                          .Sort(x => x.Descending(p => p.datapublicacao))
                                                                          );

            // var resultado = response.Documents.ToList<NoticiasElastic.noticias>();

            var ids = (from n in response.Documents
                       select n.idnoticia).ToList().Take(200);

            //db.Database.Connection.ConnectionTimeout

            var termos = (from n in db.noticia_termos
                          where ids.Contains(n.idnoticia.Value)
                          group n by n.termo into termos_noticia
                          select new Graficos.TagCloud.Termo()
            {
                termo = termos_noticia.Key,
                frequencia = termos_noticia.Sum(x => x.frequencia)
            }).OrderByDescending(o => o.frequencia).Take(filtro.qtdRegistros).Where(x => x.frequencia > 1).ToList();

            //var notEmpresa = new NoticiasEmpresa();
            //notEmpresa.TotalNoticias = Convert.ToInt32(response.Total);
            //notEmpresa.noticias = response.Documents.ToList<NoticiasElastic.noticias>();

            return(termos);
        }
예제 #2
0
        public ZRN.Empresas.NoticiasEmpresa PesquisaNoticiasEmpresa(ZRN.Empresas.FiltroNoticiasEmpresa filtro)
        {
            var RNEmpresaNoticias = new Noticias(ZeengWeb.Utils.Configuracoes.ServidorElastic, Configuracoes.IndexElastic);

            var x = RNEmpresaNoticias.Pesquisar(filtro);

            return(x);
        }
예제 #3
0
        public List <Linha> PesquisaNoticiasPorDia(FiltroNoticiasEmpresa filtro)
        {
            filtro.fontes = filtro.fontes == null || filtro.fontes.Count == 0 ? new List <int>()
            {
            } : filtro.fontes;

            var node     = new Uri(_servidorElastic);
            var settings = new ConnectionSettings(node);

            settings.DisableDirectStreaming(true);
            settings.DefaultIndex(_indexElastic + "noticias");

            var client = new ElasticClient(settings);

            var resultado = client.Search <NoticiasElastic.NoticiaElastic>(s => s
                                                                           .Query(q =>
                                                                                  q.Match(m => m.Field("empresas.idempresa").Query(filtro.idEmpresa.ToString())) &&
                                                                                  (
                                                                                      q.Term(p => p.titulo, filtro.titulo) ||
                                                                                      q.Term(p => p.subtitulo, filtro.subtitulo) ||
                                                                                      q.Term(p => p.conteudo, filtro.conteudo)
                                                                                  ) &&
                                                                                  //q.Term("empresas.idempresa", filtro.idEmpresa) &&
                                                                                  q.Terms(p => p.Field(f => f.idfonte).Terms(filtro.fontes)) &&
                                                                                  q.DateRange(d => d
                                                                                              .Field(f => f.datapublicacao)
                                                                                              .GreaterThanOrEquals(string.Format("{0:dd/MM/yy HH:mm:ss}", filtro.dataInicial))
                                                                                              .LessThanOrEquals(string.Format("{0:dd/MM/yy HH:mm:ss}", filtro.dataFinal))
                                                                                              ))
                                                                           .Aggregations(a => a.DateHistogram("byday", h => h
                                                                                                              .Field("datapublicacao")
                                                                                                              .Interval(DateInterval.Day)))
                                                                           );

            var linhas = new List <Linha>();

            if (resultado != null && resultado.Documents.Count > 0)
            {
                linhas = (from item in resultado.Aggs.DateHistogram("byday").Buckets
                          select new Linha()
                {
                    data = item.Date.Date.ToString("dd/MM/yyyy"),
                    datahora = item.Date,
                    valor = Convert.ToInt32(item.DocCount)
                }).ToList();
            }
            else
            {
                linhas = null;
            }

            return(linhas);
        }
예제 #4
0
        public List <NoticiasFonte> PesquisaTopFontes(FiltroNoticiasEmpresa filtro)
        {
            // filtro.fontes = null;

            //var DiaFimAtual = DateTime.Now;
            var dataFimAtual = filtro.dataFinal;
            //var DiaInicioAtual = DiaFimAtual.AddDays(-30); // ************* valor correto -7 *****************
            var dataInicioAtual = filtro.dataInicial;

            var node     = new Uri(_servidorElastic);
            var settings = new ConnectionSettings(node);

            settings.DisableDirectStreaming(true);
            settings.DefaultIndex(_indexElastic + "noticias");

            var client = new ElasticClient(settings);

            // Resultado top fontes apartir dos filtros
            // =========================================================================================
            var resultado = client.Search <NoticiasElastic.NoticiaElastic>(s => s
                                                                           .MatchAll()
                                                                           .Query(q =>
                                                                                  q.Match(m => m.Field("empresas.idempresa").Query(filtro.idEmpresa.ToString())) &&
                                                                                  (
                                                                                      q.Term(p => p.titulo, filtro.titulo) ||
                                                                                      q.Term(p => p.subtitulo, filtro.subtitulo) ||
                                                                                      q.Term(p => p.conteudo, filtro.conteudo)
                                                                                  ) &&
                                                                                  //    q.Term("empresas.idempresa", filtro.idEmpresa) &&
                                                                                  q.Terms(p => p.Field(f => f.idfonte).Terms(filtro.fontes)) &&
                                                                                  q.DateRange(d => d
                                                                                              .Field(f => f.datapublicacao)
                                                                                              .GreaterThanOrEquals(string.Format("{0:dd/MM/yy HH:mm:ss}", dataInicioAtual))
                                                                                              .LessThanOrEquals(string.Format("{0:dd/MM/yy HH:mm:ss}", dataFimAtual))
                                                                                              ))
                                                                           .Aggregations(a => a
                                                                                         .Terms("TotalNoticias", f => f.Field(c => c.idfonte)))
                                                                           );

            //periodo anterior
            var diferenca = ((dataFimAtual - dataInicioAtual).TotalDays) + 1;
            var dataInicialPeriodoAnterior = dataInicioAtual.AddDays(-diferenca);
            var dataFinalPeriodoAnterior   = dataInicioAtual.AddDays(-1);

            var lista = new List <NoticiasFonte>();

            if (resultado != null && resultado.Aggs.Terms("TotalNoticias").Buckets.Count > 0)
            {
                lista = (
                    from a in resultado.Aggs.Terms("TotalNoticias").Buckets
                    select new NoticiasFonte()
                {
                    idFonte = Convert.ToInt32(a.Key),
                    total = Convert.ToInt32(a.DocCount),
                    nomeFonte = GetNomeFonte(Int32.Parse(a.Key)),
                    totalNoticias = PesquisaGraficoNoticiasPorDiaFonte(dataInicioAtual, dataFimAtual, Convert.ToInt32(a.Key), filtro.idEmpresa),
                    totalPeriodoAnterior = PesquisaNoticiasTotalPeriodoAnterior(dataInicialPeriodoAnterior, dataFinalPeriodoAnterior, Convert.ToInt32(a.Key), filtro.idEmpresa)
                }
                    ).Take(10).ToList();
            }
            else
            {
                lista = null;
            }

            return(lista);
        }
예제 #5
0
        public NoticiasEmpresa Pesquisar(FiltroNoticiasEmpresa filtro)
        {
            filtro.fontes = filtro.fontes == null || filtro.fontes.Count == 0 ? new List <int>()
            {
            } : filtro.fontes;

            var node     = new Uri(_servidorElastic);
            var settings = new ConnectionSettings(node);

            settings.DisableDirectStreaming(true);
            settings.DefaultIndex(_indexElastic + "noticias");

            var client = new ElasticClient(settings);

            var response = client.Search <NoticiasElastic.NoticiaElastic>(s => s
                                                                          .From(filtro.inicial)
                                                                          .Size(filtro.qtdRegistros)
                                                                          .Query(q =>
                                                                                 q.Match(m => m.Field("empresas.idempresa").Query(filtro.idEmpresa.ToString())) &&
                                                                                 q.MultiMatch(m => m
                                                                                              .Fields(f => f.Field(p => p.titulo)
                                                                                                      .Field(p => p.subtitulo)
                                                                                                      .Field(p => p.conteudo)
                                                                                                      )
                                                                                              .Query(filtro.titulo)
                                                                                              .Operator(Operator.And)
                                                                                              ) &&
                                                                                 //q.Term("empresas.idempresa", filtro.idEmpresa) &&
                                                                                 q.Terms(p => p.Field(f => f.idfonte).Terms(filtro.fontes)) &&
                                                                                 q.DateRange(d => d
                                                                                             .Field(f => f.datapublicacao)
                                                                                             .GreaterThanOrEquals(string.Format("{0:dd/MM/yy 00:00:00}", filtro.dataInicial))
                                                                                             .LessThanOrEquals(string.Format("{0:dd/MM/yy 23:59:59}", filtro.dataFinal))
                                                                                             )
                                                                                 )
                                                                          .Highlight(h => h
                                                                                     .Fields(f => f.Field("*").PreTags("<span class='highlight'>").PostTags("</span>").NumberOfFragments(0).ForceSource(true))
                                                                                     )
                                                                          //.Query(q =>
                                                                          //        (
                                                                          //            q.Term(p => p.titulo, filtro.titulo) ||
                                                                          //            q.Term(p => p.subtitulo, filtro.subtitulo) ||
                                                                          //            q.Term(p => p.conteudo, filtro.conteudo)
                                                                          //         ) &&
                                                                          //         q.Term("empresas.idempresa", filtro.idEmpresa) &&
                                                                          //         q.Terms(p => p.Field(f => f.idfonte).Terms(filtro.fontes)) &&
                                                                          //         q.DateRange(d => d
                                                                          //            .Field(f => f.datapublicacao)
                                                                          //            .GreaterThanOrEquals(string.Format("{0:dd/MM/yy HH:mm:ss}", filtro.dataInicial))
                                                                          //            .LessThanOrEquals(string.Format("{0:dd/MM/yy HH:mm:ss}", filtro.dataFinal))
                                                                          //            ))
                                                                          .Sort(a => a.Descending(p => p.datapublicacao))
                                                                          );

            // var resultado = response.Documents.ToList<NoticiasElastic.noticias>();

            var notEmpresa = new NoticiasEmpresa();

            notEmpresa.TotalNoticias = Convert.ToInt32(response.Total);



            notEmpresa.noticias = (from d in response.Documents
                                   select new NoticiaEmpresa()
            {
                idnoticia = d.idnoticia,
                idfonte = d.idfonte,
                linguagem = d.linguagem,
                localidade = d.localidade,
                autor = d.autor,
                conteudo = d.conteudo,
                subtitulo = d.subtitulo,
                titulo = d.titulo,
                datapublicacao = d.datapublicacao,
                dominio = d.dominio,
                nomefonte = d.nomefonte,
                url = d.url,
                idnoticiaempresa = d.empresas.Where(x => x.idempresa == filtro.idEmpresa).Select(x => x.idnoticiaempresa).FirstOrDefault(),
                nomeEmpresa = d.empresas.Where(x => x.idempresa == filtro.idEmpresa).Select(x => x.nomeempresa).FirstOrDefault(),
                tags = d.empresas.Select(x => new TagNoticia()
                {
                    termo = x.nomeempresa
                }).ToList()
            }).ToList();



            // Aplicando highliths em título e conteúdo...
            var ListaHigh = response.Hits;

            foreach (var lista in ListaHigh)
            {
                var id      = lista.Id;
                var noticia = notEmpresa.noticias.Where(x => x.idnoticia == Convert.ToInt32(id)).FirstOrDefault();

                var _keys = lista.Highlights;
                foreach (var k in _keys)
                {
                    if (k.Key == "conteudo")
                    {
                        noticia.conteudo = k.Value.Highlights.FirstOrDefault();
                    }

                    if (k.Key == "titulo")
                    {
                        noticia.titulo = k.Value.Highlights.FirstOrDefault();
                    }
                }
            }

            return(notEmpresa);
        }