/// <summary> /// Perform search /// </summary> /// <param name="query"></param> /// <param name="startIndex"></param> /// <param name="blockSize"></param> /// <param name="indexDirEs"></param> /// <param name="indexDirEn"></param> /// <param name="sortBy"></param> /// <returns></returns> public List <IssueDocument> MedesSearch(Query query, int startIndex, int blockSize, Directory indexDirEs, Directory indexDirEn, Directory indexDirHe, string sortBy) { #if DEBUG T.TraceMessage(string.Format("Begin search , query: '{0}'", query.ToString())); #endif List <IssueDocument> result = new List <IssueDocument>(); try { // build a multi searcher across the 2 indexes MultiSearcher mSearcher = CombineSearchers(indexDirEs, indexDirEn, indexDirHe); TopDocs tDocs = null; int iterateLast = startIndex + blockSize; string customScoreField = "article_id"; FieldScoreQuery dateBooster = new FieldScoreQuery(customScoreField, FieldScoreQuery.Type.FLOAT); CustomScoreQuery customQuery = new CustomScoreQuery(query, dateBooster); tDocs = mSearcher.Search(customQuery, 1000); //ScoreDoc[] hits = tpDcs.scoreDocs; if (startIndex + blockSize > tDocs.TotalHits) { iterateLast = tDocs.TotalHits; } for (int i = startIndex; i < iterateLast; i++) { // Document hitDoc = mSearcher.Doc(hits[i].doc); Document hitDoc = mSearcher.Doc(i); result.Add(new IssueDocument() { Id = Int32.Parse(hitDoc.Get("issue_id").ToString()) }); } // close the searcher and indexes mSearcher.Dispose(); indexDirEs.Dispose(); indexDirEn.Dispose(); indexDirHe.Dispose(); } catch (Exception ex) { T.TraceError("Error MedesSearch, query '{0}'", query.ToString()); T.TraceError(ex); throw ex; } return(result); }
public void MultiSearcher_Sort_By_Int_Test() { var multiSearcher = new MultiSearcher( new Searchable[] { _searcher1, _searcher2 }); var result = Search(multiSearcher, _query, new Sort(new SortField(IdFieldName, SortField.INT))); var expected = new[] { 10, 20, 30, 40, 50 }; CollectionAssert.AreEqual(expected, result); multiSearcher.Dispose(); }
public void MultiSearcher_Sort_By_String_Test() { var multiSearcher = new MultiSearcher( new Searchable[] { _searcher1, _searcher2 }); var result = Search(multiSearcher, _query, new Sort(new SortField(NameFieldName, SortField.STRING))); // Anders, Andreas, Anja, Anne var expected = new[] { 50, 10, 40, 20, 30 }; CollectionAssert.AreEqual(expected, result); multiSearcher.Dispose(); }