Esempio n. 1
0
        public VerseAnalysis GetForVerse(int chapterNumber, int verseNumber)
        {
            var query = new BooleanQuery(disableCoord: true);

            query
            .FilterByType <VerseAnalysis>()
            .AddNumericRangeQuery <VerseAnalysis>(
                x => x.ChapterNumber,
                lowerInclusive: chapterNumber,
                upperInclusive: chapterNumber,
                occur: Occur.MUST)
            .AddNumericRangeQuery <VerseAnalysis>(
                x => x.VerseNumber,
                lowerInclusive: verseNumber,
                upperInclusive: verseNumber,
                occur: Occur.MUST);

            IndexSearcher indexSearcher = IndexSearcherProvider.GetIndexSearcher();
            TopDocs       docs          = indexSearcher.Search(query, 999);
            VerseAnalysis result        = docs.ScoreDocs
                                          .Select(x => indexSearcher.Doc(x.Doc))
                                          .Single()
                                          .GetObject <VerseAnalysis>();

            return(result);
        }
        public void Write(VerseAnalysis verseAnalysis)
        {
            IEnumerable <string> roots = verseAnalysis.Words
                                         .SelectMany(x => x.WordParts)
                                         .Where(x => !string.IsNullOrWhiteSpace(x.Root))
                                         .Select(x => x.Root)
                                         .Distinct()
                                         .Select(ArabicWordIndexer.GetIndexForArabic);

            var document = new Document();

            document.StoreAndIndex(verseAnalysis, x => x.ChapterNumber);
            document.StoreAndIndex(verseAnalysis, x => x.VerseNumber);
            document.IndexArray(VerseAnalysisRepository.RootWordsIndexName, roots);
            document.AddObject(verseAnalysis);

            IndexWriter indexWriter = IndexWriterProvider.GetIndexWriter();

            indexWriter.AddDocument(document);
        }
Esempio n. 3
0
        public ActionResult Index(int chapterNumber, int verseNumber)
        {
            if (!QuranStructure.TryValidateChapterAndVerse(chapterNumber, verseNumber))
            {
                return(HttpNotFound());
            }

            Chapter       chapter  = ChapterRepository.Get(chapterNumber);
            VerseAnalysis analysis =
                VerseAnalysisRepository.GetForVerse(chapterNumber, verseNumber);

            var selectChapterAndVerse = new SelectChapterAndVerse(
                selectedChapterNumber: chapterNumber,
                selectedVerseNumber: verseNumber,
                url: "/Analysis/");
            var viewModel = new ViewModel(
                chapter: chapter,
                verseNumber: verseNumber,
                verseAnalysis: analysis,
                selectChapterAndVerse: selectChapterAndVerse);

            return(View("VerseAnalysis", viewModel));
        }
Esempio n. 4
0
        private VerseViewModel CreateVerseViewModel(
            VerseAnalysis verseAnalysis,
            VerseAnalysisWord analysisWord,
            VerseAnalysisWordPart analysisWordPart)
        {
            const int WordsBeforeAndAfter = 3;
            int       lower = Math.Max(1, analysisWord.WordNumber - WordsBeforeAndAfter);
            int       upper = Math.Min(verseAnalysis.Words.Count, analysisWord.WordNumber + WordsBeforeAndAfter);
            var       words = new List <VerseAnalysisWord>();

            for (int index = lower - 1; index < upper; index++)
            {
                words.Add(verseAnalysis.Words[index]);
            }

            var result = new VerseViewModel(
                chapterNumber: verseAnalysis.ChapterNumber,
                verseNumber: verseAnalysis.VerseNumber,
                selectedWord: analysisWord,
                selectedWordPart: analysisWordPart,
                words: words);

            return(result);
        }