Esempio n. 1
0
 public void Random()
 {
     var r = new RandomSortOrder("random");
     var rndSort = r.ToString();
     Console.WriteLine(rndSort);
     Assert.Like(rndSort, "random_\\d+ asc");
 }
Esempio n. 2
0
 public void RandomWithOrder()
 {
     var r = new RandomSortOrder("random", Order.DESC);
     var rndSort = r.ToString();
     Console.WriteLine(rndSort);
     Assert.Like(rndSort, "random_\\d+ desc");
 }
Esempio n. 3
0
 public void Random()
 {
     var r = new RandomSortOrder("random");
     var rndSort = r.ToString();
     Console.WriteLine(rndSort);
     Assert.That(rndSort, Is.StringMatching("random_\\d+ asc"));
 }
 public void Random()
 {
     var r = new RandomSortOrder("random");
     var rndSort = r.ToString();
     Console.WriteLine(rndSort);
     StringAssert.IsMatch("random_\\d+ asc", rndSort);
 }
Esempio n. 5
0
 public void RandomWithSeedAndOrder() {
     const string seed = "234asd";
     var r = new RandomSortOrder("random", seed, Order.DESC);
     var rndSort = r.ToString();
     Console.WriteLine(rndSort);
     Assert.Like(rndSort, string.Format("random_{0} desc", seed));
 }
Esempio n. 6
0
        public void RandomWithOrder()
        {
            var r       = new RandomSortOrder("random", Order.DESC);
            var rndSort = r.ToString();

            Console.WriteLine(rndSort);
            StringAssert.IsMatch("random_\\d+ desc", rndSort);
        }
Esempio n. 7
0
        public void Random()
        {
            var r       = new RandomSortOrder("random");
            var rndSort = r.ToString();

            Console.WriteLine(rndSort);
            StringAssert.IsMatch("random_\\d+ asc", rndSort);
        }
Esempio n. 8
0
 public void RandomWithSeed()
 {
     const string seed = "234asd";
     var r = new RandomSortOrder("random", seed);
     var rndSort = r.ToString();
     Console.WriteLine(rndSort);
     Assert.That(rndSort, Is.StringMatching(string.Format("random_{0} asc", seed)));
 }
Esempio n. 9
0
        public void Random()
        {
            var r       = new RandomSortOrder("random");
            var rndSort = r.ToString();

            Console.WriteLine(rndSort);
            Assert.Like(rndSort, "random_\\d+ asc");
        }
Esempio n. 10
0
        public void RandomWithOrder()
        {
            var r       = new RandomSortOrder("random", Order.DESC);
            var rndSort = r.ToString();

            testOutputHelper.WriteLine(rndSort);
            Assert.Matches("random_\\d+ desc", rndSort);
        }
Esempio n. 11
0
        public void RandomWithSeedAndOrder()
        {
            const string seed    = "234asd";
            var          r       = new RandomSortOrder("random", seed, Order.DESC);
            var          rndSort = r.ToString();

            Console.WriteLine(rndSort);
            Assert.AreEqual(rndSort, string.Format("random_{0} desc", seed));
        }
Esempio n. 12
0
        public void RandomWithSeed()
        {
            const string seed    = "234asd";
            var          r       = new RandomSortOrder("random", seed);
            var          rndSort = r.ToString();

            Console.WriteLine(rndSort);
            Assert.Like(rndSort, string.Format("random_{0} asc", seed));
        }
Esempio n. 13
0
        public void RandomWithSeedAndOrder()
        {
            const string seed    = "234asd";
            var          r       = new RandomSortOrder("random", seed, Order.DESC);
            var          rndSort = r.ToString();

            testOutputHelper.WriteLine(rndSort);
            Assert.Equal(rndSort, string.Format("random_{0} desc", seed), true, true, true);
        }
Esempio n. 14
0
        public void RandomWithOrder()
        {
            var r       = new RandomSortOrder("random", Order.DESC);
            var rndSort = r.ToString();

            Console.WriteLine(rndSort);
            Assert.That(rndSort.Contains("random_"), Is.True);
            Assert.That(rndSort.Contains(" desc"), Is.True);
        }
Esempio n. 15
0
        //public String GetBaseUri(HttpRequestBase req, UrlHelper url_helper)
        //{
        //    if (req.Url != null)
        //    {
        //        return string.Format("{0}://{1}{2}", req.Url.Scheme, req.Url.Authority, url_helper.Content("~"));
        //    }

        //    LogHelper.StatsLog(null, "GetBaseUri()", String.Format("Failed, request is null!"), null, null);
        //    return "http://localhost/";
        //}

        // public abstract SolrSearchResults Search(string term, List<string> ids, int rows, int row_start, string parent_id, List<SortField> sort_orders, List<KeyValuePair<string, string>> facet_constraints, List<KeyValuePair<string, string>> facets, List<FacetRange> facet_ranges);
        // public abstract SolrSearchResults GetRecord(string id);
        // public abstract SolrSearchResults GetSearchSuggestions(string str);


        public virtual SolrSearchResults Search(SearchQuery query, List <KeyValuePair <string, string> > facets, List <FacetRange> facet_ranges)
        {
            // string solr_term = (ids.Count > 0) ? String.Format("{0}:^", _solrIdField) : makeSolrTerm(term, ids);
            string solr_term = makeSolrTerm(query.Term, query.IDs);

            //if (String.IsNullOrEmpty(query.ParentID))
            //    solr_term = String.Format("{0} AND -{1}:[* TO *]", solr_term, ParentIdFieldName);
            //else
            //    solr_term = String.Format("{0} AND {1}:{2}", solr_term, ParentIdFieldName, query.ParentID);

            if (String.IsNullOrEmpty(query.ParentID))
            {
                solr_term = String.Format("{0} AND -{1}:[* TO *]", solr_term, ParentIdFieldName);
            }
            else
            {
                solr_term = String.Format("{0} AND {1}:{2}", solr_term, ParentIdFieldName, query.ParentID);
            }


            #region facet constraints
            var str = new StringBuilder();
            var i   = 0;
            foreach (FacetConstraint f in query.FacetConstraints) // KeyValuePair<string, List<string>>
            {
                int j = 0;
                str.Append("(");

                foreach (string val in f.Constraints)
                {
                    if (val.Contains(" to "))
                    {
                        // facet range, need to convert user friendly name sent by ajax back to correct db field name, if needed
                        var fn = f.Field;
                        foreach (FacetRange fr in facet_ranges)
                        {
                            if (fn == fr.DisplayName)
                            {
                                fn = fr.Field;
                                break;
                            }
                        }
                        // iterate over string list of values here, for multi valued constraints same key = OR, when going to different key AND
                        // if not multi valued constraints then always AND?
                        str.Append(String.Format("{0}:[{1}]", fn.Replace(":", @"\:"), val.ToUpper())); // str.Append("DateStartYear:[1800 TO 1900]");
                    }
                    else
                    {
                        str.Append(String.Format("{0}:{1}{2}{3}", f.Field.Replace(":", @"\:"), "\"", val, "\""));
                    }

                    j++;
                    if (j != f.Constraints.Count)
                    {
                        str.Append(" OR ");
                    }
                    else
                    {
                        str.Append(")");
                    }
                }

                i++;
                if (i != query.FacetConstraints.Count)
                {
                    //if(MultiFacetConstraints)
                    //    str.Append(" OR ");
                    //else
                    str.Append(" AND ");
                }
            }

            var d = new Dictionary <string, string> {
                { "fq", str.ToString() }, { "facet.sort", "count" }
            };                                                                                              // ordering of the facets
            #endregion

            #region search term highlighting
            if (!String.IsNullOrEmpty(query.Term)) // if user has entered a search term then we want highlighting of that term in the results, if not we don't want it as adds overheads
            {
                d.Add("hl", "on");
                d.Add("hl.fl", "*");
                // d.Add("hl.fragsize", "0");
            }
            #endregion search term highlighting

            #region facet queries
            // only needed if not multi facet constraints, as multi facet constraints are enabled then we don't need to refine the
            // available facets with the search (ie only return facets applicable to the search, the list obtained once at the start
            // remains valid, so no point adding overheads to this query
            // NB: if we are requesting 0 rows of results then this must be a request just for facet data, so in this case add the facet params
            var facet = new FacetParameters();
            facet.Limit = FacetLimit;

            if ((MultiFacetConstraints == false) || (query.Rows == 0))
            {
                var queries = new List <ISolrFacetQuery>();
                foreach (KeyValuePair <string, string> kvp in facets) // these come from the app config
                {
                    queries.Add(new SolrFacetFieldQuery(kvp.Key));
                }

                // have to use the slightly crude method below as Facet by Range is in Solr 3.1+ but not exposed by solrnet
                // see no FaceRanges property exposed by Solr results object
                // Would want to use following: &facet.range=DateStartYear&f.DateStartYear.facet.range.start=1000&f.DateStartYear.facet.range.end=2100&f.DateStartYear.facet.range.gap=50
                // Full query: http://armserv:8080/solr/core1/select?facet=true&facet.sort=count&start=0&q=*:*+AND+-ParentNodes:[*+TO+*]&?=&fq=&rows=0&facet.field=Genre&facet.range=DateStartYear&f.DateStartYear.facet.range.start=1000&f.DateStartYear.facet.range.end=2100&f.DateStartYear.facet.range.gap=50

                foreach (FacetRange fr in facet_ranges) // these need to come from the app config
                {
                    if (fr.WildcardLower)
                    {
                        queries.Add(new SolrFacetQuery(new SolrQueryByRange <string>(fr.Field, "*", (fr.From - 1).ToString())));
                    }

                    for (int y = fr.From; y < fr.To; y = y + fr.Gap)
                    {
                        queries.Add(new SolrFacetQuery(new SolrQueryByRange <string>(fr.Field, y.ToString(), (y + (fr.Gap - 1)).ToString())));
                    }

                    if (fr.WildcardUpper)
                    {
                        queries.Add(new SolrFacetQuery(new SolrQueryByRange <string>(fr.Field, (fr.To + 1).ToString(), "*")));
                    }
                }

                facet.Queries = queries;
            }
            #endregion

            #region sort orders
            var order_by = new List <SortOrder>();
            foreach (SortField sf in query.SortFields)
            {
                SortOrder so;

                if (sf.DbField == "Random")
                {
                    so = new RandomSortOrder("randomF");
                }
                else
                {
                    var order = Order.ASC;
                    if (sf.SortDirection.ToLower() == "desc")
                    {
                        order = Order.DESC;
                    }
                    so = new SortOrder(sf.DbField, order);
                }

                order_by.Add(so);
            }
            #endregion sort orders

            // i think the below could be put in super classes, and makeSolrSearchResults changed to accept the disassembled properties of the specific IInqItem implementation
            #region ninject approach doesn't work, get "can't create instance of interface" error?

            /*using (IKernel kernel = new StandardKernel(new SolrNetModule(_solrUri)))
             * {
             *  var solr = kernel.Get<ISolrOperations<IInqItem>>();
             *  try
             *  {
             *      var results = solr.Query(new SolrQuery(solr_term), new QueryOptions { Rows = rows, Start = row_start, Facet = facet, OrderBy = order_by, ExtraParams = d });
             *      return makeSolrSearchResults(results, facets, facet_ranges);
             *  }
             *  catch (Exception e)
             *  {
             *      throw new Exception("Fatal error, could not perform search, Solr not responding?: " + e.Message);
             *  }
             * }*/
            #endregion

            // var solr = ServiceLocator.Current.GetInstance<ISolrOperations<InqItemArmNode>>();
            // var solr = ServiceLocator.Current.GetInstance<ISolrOperations<InqItemBod>>();

            //try
            //{
            var results = Solr.Query(new SolrQuery(solr_term), new QueryOptions
            {
                Rows        = query.Rows,
                Start       = query.RowStart,
                Facet       = facet,
                OrderBy     = order_by,
                ExtraParams = d
            });
            return(makeSolrSearchResults(results, facets, facet_ranges));
            //}
            //catch (Exception e)
            //{
            //    throw new Exception("Fatal error, could not perform search, Solr not responding or failed to create results?: " + e.Message);
            //}
        }