public static Section ToSection(this LuceneDocument source)
        {
            SectionType secType;

            Enum.TryParse(source.GetValues("Type").FirstOrDefault(), true, out secType);

            Section result = new Section
            {
                Id                     = source.GetValues("Id").FirstOrDefault(),
                InternalId             = Guid.Parse(source.GetValues("InternalId").First()),
                DocumentSimilarityData = new SimilarityData
                {
                    ConsolidatedTokens = source.GetStringList("DocumentToken"),
                    ConsolidatedTopics = source.GetStringList("DocumentTopic"),
                },
                SectionSimilarityData = new SimilarityData
                {
                    ConsolidatedTokens = source.GetStringList("SectionToken"),
                    ConsolidatedTopics = source.GetStringList("SectionTopic"),
                },
                TokenCount         = source.GetInt("TokenCount"),
                Language           = source.GetValues("Language")?.FirstOrDefault(),
                RecognitionQuality = source.GetDouble("RecognitionQuality"),
                Type     = secType,
                Text     = source.GetValues("Text")?.FirstOrDefault(),
                ParentId = Guid.Parse(source.GetValues("ParentDocumentId").First())
            };

            return(result);
        }
        public static MarcellDocument ToDocument(this LuceneDocument source)
        {
            MarcellDocument result = new MarcellDocument
            {
                Id                     = source.GetValues("Id")?.FirstOrDefault(),
                InternalId             = Guid.Parse(source.GetValues("InternalId").First()),
                ApprovalDate           = source.GetDate("ApprovalDate"),
                DocumentDate           = source.GetDate("DocumentDate"),
                EffectiveDate          = source.GetDate("EffectiveDate"),
                DocumentSimilarityData = new SimilarityData
                {
                    ConsolidatedTokens = source.GetStringList("DocumentToken"),
                    ConsolidatedTopics = source.GetStringList("DocumentTopic"),
                },
                TokenCount         = source.GetInt("TokenCount"),
                DocumentType       = source.GetValues("DocumentType")?.FirstOrDefault(),
                OriginalType       = source.GetValues("OriginalType")?.FirstOrDefault(),
                Issuer             = source.GetValues("Issuer")?.FirstOrDefault(),
                Language           = source.GetValues("Language")?.FirstOrDefault(),
                Url                = source.GetValues("Url")?.FirstOrDefault(),
                RecognitionQuality = source.GetDouble("RecognitionQuality"),
                IsStructured       = source.GetBool("IsStructured"),
                FileName           = source.GetValues("FileName")?.FirstOrDefault(),
            };

            return(result);
        }
        public static Paragraph ToParagraph(this LuceneDocument source)
        {
            ParagraphType pType;

            Enum.TryParse(source.GetValues("Type")?.FirstOrDefault(), true, out pType);

            Paragraph result = new Paragraph
            {
                Id                     = source.GetValues("Id").FirstOrDefault(),
                InternalId             = Guid.Parse(source.GetValues("InternalId").First()),
                DocumentSimilarityData = new SimilarityData
                {
                    ConsolidatedTokens = source.GetStringList("DocumentToken"),
                    ConsolidatedTopics = source.GetStringList("DocumentTopic"),
                },
                SectionSimilarityData = new SimilarityData
                {
                    ConsolidatedTokens = source.GetStringList("SectionToken"),
                    ConsolidatedTopics = source.GetStringList("SectionTopic"),
                },
                ParagraphSimilarityData = new SimilarityData
                {
                    ConsolidatedTokens = source.GetStringList("ParagraphToken"),
                    ConsolidatedTopics = source.GetStringList("ParagraphTopic"),
                },
                TokenCount         = source.GetInt("TokenCount"),
                Language           = source.GetValues("Language")?.FirstOrDefault(),
                RecognitionQuality = source.GetDouble("RecognitionQuality"),
                Order           = source.GetInt("Order"),
                Text            = source.GetValues("Text")?.FirstOrDefault(),
                ParagraphNumber = source.GetValues("ParagraphNumber")?.FirstOrDefault(),
                PointNumber     = source.GetValues("PointNumber")?.FirstOrDefault(),
                ParentId        = Guid.Parse(source.GetValues("ParentSectionId").First())
            };

            return(result);
        }
        public static Sentence ToSentence(this LuceneDocument source)
        {
            Sentence result = new Sentence
            {
                Id                     = source.GetValues("Id").FirstOrDefault(),
                InternalId             = Guid.Parse(source.GetValues("InternalId").First()),
                DocumentSimilarityData = new SimilarityData
                {
                    ConsolidatedTokens = source.GetStringList("DocumentToken"),
                    ConsolidatedTopics = source.GetStringList("DocumentTopic"),
                },
                SectionSimilarityData = new SimilarityData
                {
                    ConsolidatedTokens = source.GetStringList("SectionToken"),
                    ConsolidatedTopics = source.GetStringList("SectionTopic"),
                },
                ParagraphSimilarityData = new SimilarityData
                {
                    ConsolidatedTokens = source.GetStringList("ParagraphToken"),
                    ConsolidatedTopics = source.GetStringList("ParagraphTopic"),
                },
                SentenceSimilarityData = new SimilarityData
                {
                    ConsolidatedTokens = source.GetStringList("SentenceToken"),
                    ConsolidatedTopics = source.GetStringList("SentenceTopic"),
                },
                TokenCount         = source.GetInt("TokenCount"),
                Language           = source.GetValues("Language")?.FirstOrDefault(),
                RecognitionQuality = source.GetDouble("RecognitionQuality"),
                Order    = source.GetInt("Order"),
                Text     = source.GetValues("Text")?.FirstOrDefault(),
                ParentId = Guid.Parse(source.GetValues("ParentParagraphId").First())
            };

            return(result);
        }