Ejemplo n.º 1
0
        //Crea un documento Lucene a partir de los Datos del documento Xively
        private static Document createLuceneDocumentXyvely(UrlDocument URLDocument)
        {
            Document document = new Document();

            //Identificadores. Se almacenan pero no se indexan ni analizan
            document.Add(new Field("Id", URLDocument.Id.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
            document.Add(new Field("feed", URLDocument.URL, Field.Store.YES, Field.Index.NOT_ANALYZED));
            //Campos de texto a ser analizados e indexados
            document.Add(new Field("Descripcion", URLDocument.Resume, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));
            document.Add(new Field("Title", URLDocument.Tittle, Field.Store.YES, Field.Index.ANALYZED));
            document.Add(new Field("Tags", URLDocument.Tags, Field.Store.YES, Field.Index.ANALYZED));
            document.Add(new Field("Conceptos", URLDocument.ConceptosLista(), Field.Store.YES, Field.Index.ANALYZED));
            document.Add(new Field("DataStreams", URLDocument.Datastreams_feed, Field.Store.YES, Field.Index.ANALYZED));
            //Campos que se almacenan pero no se analizan pero si se indexan
            document.Add(new Field("Location", URLDocument.Localizacion_name, Field.Store.YES, Field.Index.NOT_ANALYZED));
            document.Add(new Field("Domain", URLDocument.Domain, Field.Store.YES, Field.Index.NOT_ANALYZED));
            //Campos almacenados por propósitos de información temparana del feed, por ello no se analizan y no se indexan
            document.Add(new Field("Website", URLDocument.Website, Field.Store.YES, Field.Index.NO));
            document.Add(new Field("Elevacion", URLDocument.Elevacion, Field.Store.YES, Field.Index.NO));
            document.Add(new Field("Latitud", URLDocument.Latitud, Field.Store.YES, Field.Index.NO));
            document.Add(new Field("Longitud", URLDocument.Longitud, Field.Store.YES, Field.Index.NO));

            //document.Add(new Field(FIELD_CONTENT_NAME, URLDocument.Resume, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS));
            return(document);
        }
        private Dictionary <string, UrlDocument> AnalizarDocumento(FeedXively feed)
        {
            Dictionary <string, UrlDocument> UrlResultTemp = new Dictionary <string, UrlDocument>();

            //RecolectorDocumentosXively recx;
            UrlDocument docLucene = new UrlDocument();

            //Obtiene el Id del feed como clave para el indice
            docLucene.Id  = feed.feed.id.ToString();
            docLucene.URL = feed.feed.feed.ToString();
            Trace.WriteLine("Creando Documento Lucene: " + docLucene.Id);

            //Obtiene el documento JSON original con etiquetas
            if (!string.IsNullOrEmpty(feed.DocumentJSON))
            {
                docLucene.DocumentUnParsed = feed.DocumentJSON;
            }
            //Relaciona los conceptos por los cuales que se encontró el documento en el servidor
            docLucene.Conceptos = feed.Conceptos;

            //Obtiene un resumen del Documento
            //documentResume = _HTMLParseManager.GetResume(documentParsed);
            if (!string.IsNullOrEmpty(feed.feed.description))
            {
                docLucene.Resume = feed.feed.description;
            }

            //Obtiene el Titulo del Documento
            if (!string.IsNullOrEmpty(feed.feed.title))
            {
                docLucene.Tittle = feed.feed.title;
            }

            //Obtiene las anotaciones
            if (feed.feed.tags != null)
            {
                StringBuilder builder = new StringBuilder();
                foreach (string tag in feed.feed.tags)
                {
                    builder.Append(tag).Append(" ");
                }
                docLucene.Tags = builder.ToString();
            }

            //Obtiene el sitio web de informacion adicional
            if (feed.feed.website != null)
            {
                docLucene.Website = feed.feed.website.ToString();
            }

            //Obtiene los datos de la localización
            if (feed.feed.location != null)
            {
                if (feed.feed.location.name != null)
                {
                    docLucene.Localizacion_name = feed.feed.location.name;
                }
                docLucene.Domain = feed.feed.location.domain.ToString();
                if (feed.feed.location.ele != null)
                {
                    docLucene.Elevacion = feed.feed.location.ele;
                }
                if (feed.feed.location.lat != null)
                {
                    docLucene.Latitud = feed.feed.location.lat;
                }
                if (feed.feed.location.lon != null)
                {
                    docLucene.Longitud = feed.feed.location.lon;
                }
            }

            //Obtiene una Lista de datastreams del feed en una cadena con el fin de darsela a Lucene para su indexación
            if (feed.feed.datastreams != null)
            {
                foreach (Datastream Dts in feed.feed.datastreams)
                {
                    docLucene.Datastreams_feed = Dts.id + " " + Dts.unit.symbol + " " + Dts.unit.label + " ";
                    string listatags = string.Empty;
                    if (Dts.tags != null)
                    {
                        foreach (string tg in Dts.tags)
                        {
                            listatags += "," + tg.ToString();
                        }
                    }
                    docLucene.Datastreams_feed = listatags;
                }
            }

            //Finalmente esta información se coloca en un solo string, pór posibles reusos
            string temp = string.Empty;

            if (!string.IsNullOrEmpty(docLucene.Resume))
            {
                temp = temp + " " + docLucene.Resume + " ";
            }
            if (!string.IsNullOrEmpty(docLucene.Tittle))
            {
                temp = temp + " " + docLucene.Tittle + " ";
            }
            if (!string.IsNullOrEmpty(docLucene.Tags))
            {
                temp = temp + " " + docLucene.Tags + " ";
            }
            if (!string.IsNullOrEmpty(docLucene.Website))
            {
                temp = temp + " " + docLucene.Website + " ";
            }
            if (!string.IsNullOrEmpty(docLucene.ConceptosLista()))
            {
                temp = temp + " " + docLucene.ConceptosLista() + " ";
            }
            if (!string.IsNullOrEmpty(docLucene.Localizacion_name))
            {
                temp = temp + " " + docLucene.Localizacion_name + " ";
            }
            if (!string.IsNullOrEmpty(docLucene.Domain))
            {
                temp = temp + " " + docLucene.Domain + " ";
            }
            if (!string.IsNullOrEmpty(docLucene.Datastreams_feed))
            {
                temp = temp + " " + docLucene.Datastreams_feed + " ";
            }
            docLucene.DocumentParsed = docLucene.DocumentParsed + " " + temp;

            //Estos datos no aportan a la búsqueda de texto por ello no se incluyen
            //docLucene.Elevacion + " " +
            //docLucene.Latitud + " " +
            //docLucene.Longitud + " " +

            //Pasamos aminusculas todo el texto ya que algunos campos no se analizaron
            docLucene.DocumentParsed = docLucene.DocumentParsed.ToLower();

            //Crear el diccionario de UrlResult analizados
            UrlResultTemp.Add(feed.feed.feed.ToString(), docLucene);


            return(UrlResultTemp);
        }