public string GetPassageDetails(long pid, string passage) { string details = "<html>"; CollectionPassage cp = collectionProvider.GetPassageDetails(pid); details += "<body"; details += "<title>" + cp.GetTitle() + "</br></title>"; details += "Passage ID : " + cp.passage_ID.ToString() + "</br>"; details += "is_selected : " + cp.is_selected.ToString() + "</br>"; details += "URL : " + cp.url + "</br>"; details += "Query ID : " + cp.query_ID.ToString() + "</br>"; details += passage + "</br>"; details += "</body"; details += "</html>"; return(details); }
/// <summary> /// Searches the index for the querytext and displays a ranked list of results to the screen /// </summary> /// <param name="querytext">The text to search the index</param> private string SearchAndDisplayResults(string querytext, long qid, List <long> relevantList) { System.Console.WriteLine("Searching for " + querytext); querytext = querytext.ToLower(); Query query = parser.Parse(querytext); System.Console.WriteLine($"Searching for { query.ToString()}"); TopDocs results = searcher.Search(query, MAX_QUERY); // create highlighter - using strong tag to highlight in this case (change as needed) //IFormatter formatter = new SimpleHTMLFormatter("<strong>", "</strong>"); IFormatter formatter = new SimpleHTMLFormatter("<span style=\"font-weight:bold;background-color:yellow;\">", "</span>"); // excerpt set to 200 characters in length var fragmenter = new SimpleFragmenter(3000); var scorer = new QueryScorer(query); var highlighter = new Highlighter(formatter, scorer) { TextFragmenter = fragmenter }; long rank = 0; float topscore = 0f; long foundrelevants = 0; List <TrecItem> logItems = new List <TrecItem>(); SearchedListViewModel.DeleteAll(); foreach (ScoreDoc scoreDoc in results.ScoreDocs) { if (rank == 0) { topscore = scoreDoc.Score; } rank++; Lucene.Net.Documents.Document doc = searcher.Doc(scoreDoc.Doc); long id = Convert.ToInt64(doc.Get(PID_FN).ToString()); CollectionPassage ps = collectionProvider.Passages[id]; // Logging Trec logItems.Add(new TrecItem(0, id, rank, scoreDoc.Score)); // get highlighted fragment TokenStream stream = analyzer.TokenStream("", new StringReader(ps.passage_text)); string highlighted = highlighter.GetBestFragment(stream, ps.passage_text); //string url2 = doc.Get(TEXT_FN).ToString(); //Console.WriteLine("Rank " + rank + " text " + myFieldValue); if (highlighted == null) { highlighted = ps.passage_text; } if (relevantList.Contains(id)) { foundrelevants++; } SearchedListViewModel.Add(scoreDoc.Score / topscore, id, ps.GetTitle(), ps.url, highlighted, relevantList.Contains(id)); //Console.WriteLine("==>" + highlighted); } StatusBarViewModel.Instance.NumRelevants = "Num Relevants : " + foundrelevants.ToString() + "/" + relevantList.Count.ToString(); StatusBarViewModel.Instance.NumSearch = "Num Searched :" + results.ScoreDocs.Length.ToString(); // Logging Trec trecLogger.Logging(qid, logItems); //Console.WriteLine(string.Join(",", relevantList)); return(query.ToString()); }