Example #1
0
        /// <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();
        }