コード例 #1
0
        public ActionResult FacetSearch(Int32? YearStart, Int32? YearEnd, Int32? MaxSalary, Int32? MinHomeRuns, String field, String criteria)
        {
            var query = new SolrQueryByRange<Int32>("year", YearStart.Value, YearEnd.Value, true)
                && new SolrQueryByRange<Int32>("salary", 0, MaxSalary.Value)
                && new SolrQueryByRange<Int32>("homeruns", MinHomeRuns.Value, 500)
                && new SolrQuery(String.Format("{0}:{1}", field, criteria));

            var options = GetFactedQueryOptions(MinHomeRuns.Value);

            var results = _solr.Query(query, options);
            var searchModel = new HitterSearchViewModel();
            SetSearchModelMainResults(results, searchModel);
            searchModel.OriginalCriteria = new HitterSearch()
            {
                MaxSalary = MaxSalary.Value,
                MinHomeRuns = MinHomeRuns.Value,
                YearEnd = YearEnd.Value,
                YearStart = YearStart.Value
            };

            GenerateFacetedSearchCategories(results, searchModel);

            searchModel.NumberFound = results.NumFound;
            searchModel.RecordsShown = results.Count;

            return View("Results", searchModel);
        }
コード例 #2
0
ファイル: SolrNetOperate.cs プロジェクト: xiaopohou/SolrDemo
 /// <summary>
 /// </summary>
 /// <param name="dictPars">查询参数字典</param>
 /// <param name="start">分页开始标识</param>
 /// <param name="rows">每页数量</param>
 /// <param name="startTime">开始时间</param>
 /// <param name="endTime">结束时间</param>
 /// <param name="count">输出参数 总个数</param>
 /// <returns></returns>
 /// <remarks>peng.li 2015年7月23日14:11:43</remarks>
 public static List<int> GroupingSerach(Dictionary<string, string> dictPars, int start, int rows,
     DateTime startTime, DateTime endTime, out int count)
 {
     //定义solr
     var solr = ServiceLocator.Current.GetInstance<ISolrOperations<LogItems>>();
     var queryOptions = new QueryOptions();
     //定义分组
     var groupingParameters = new GroupingParameters();
     groupingParameters.Fields = new Collection<string> { "logs_id" };
     groupingParameters.Ngroups = true; //设置查询分组的总个数为true
     //定义过滤条件
     var timeRange = new SolrQueryByRange<DateTime>("logs_time", startTime, endTime);
     queryOptions.AddFilterQueries(timeRange);
     foreach (string key in dictPars.Keys)
     {
         queryOptions.AddFilterQueries(new SolrQueryByField(key, dictPars[key]));
     }
     //定义排序
     queryOptions.OrderBy = new Collection<SortOrder> { new SortOrder("logs_id", Order.DESC) };
     queryOptions.Grouping = groupingParameters;
     queryOptions.Start = start;
     queryOptions.Rows = rows;
     SolrQueryResults<LogItems> res = solr.Query(SolrQuery.All, queryOptions);
     GroupedResults<LogItems> items = res.Grouping["logs_id"];
     count = items.Ngroups ?? 0;
     return items.Groups.Select(item => Convert.ToInt32(item.GroupValue)).ToList();
 }
コード例 #3
0
ファイル: LocalParamsTests.cs プロジェクト: Jroland/SolrNet
 public void OperatorPlus_multiple_queries()
 {
     var p = new LocalParams {
         {"type", "spatial"},
     };
     var q = new SolrQueryByField("field", "value");
     var q2 = new SolrQueryByRange<decimal>("price", 100m, 200m);
     var qq = p + (q + q2);
     Assert.AreEqual("{!type=spatial}(field:(value)  price:[100 TO 200])", SerializeQuery(qq));
 }
コード例 #4
0
        private static FacetParameters CreateFacetParameters()
        {
            var lessThanFifty = new SolrQueryByRange<decimal>("ListPrice", 0m, 50m);
            var fiftyTo100 = new SolrQueryByRange<decimal>("ListPrice", 50m, 100m);
            var oneHundredToFiveHundred = new SolrQueryByRange<decimal>("ListPrice", 100m, 500m);
            var overFiveHundred = new SolrQueryByRange<string>("ListPrice", "500", "*");

            return new FacetParameters
            {
                Queries = new List<ISolrFacetQuery>
                {
                    new SolrFacetFieldQuery("CategoryName") { MinCount = 1 },
                    new SolrFacetQuery(lessThanFifty),
                    new SolrFacetQuery(fiftyTo100),
                    new SolrFacetQuery(oneHundredToFiveHundred),
                    new SolrFacetQuery(overFiveHundred)
                }
            };
        }
コード例 #5
0
        public ActionResult Search(HitterSearch criteria)
        {
            var query = new SolrQueryByRange<Int32>("year", criteria.YearStart, criteria.YearEnd, true)
                            && new SolrQueryByRange<Int32>("salary", 0, criteria.MaxSalary)
                            && new SolrQueryByRange<Int32>("homeruns", criteria.MinHomeRuns, 500);

            var options = GetFactedQueryOptions(criteria.MinHomeRuns);

            var results = _solr.Query(query, options);

            var searchModel = new HitterSearchViewModel();
            SetSearchModelMainResults(results, searchModel);
            searchModel.OriginalCriteria = criteria;

            GenerateFacetedSearchCategories(results, searchModel);

            searchModel.NumberFound = results.NumFound;
            searchModel.RecordsShown = results.Count;

            return View("Results", searchModel);
        }
コード例 #6
0
 public void IntLowerExclusiveUpperInclusive()
 {
     var q = new SolrQueryByRange<int>("id", 123, 456, false, true);
     Assert.AreEqual("id:{123 TO 456]", Serialize(q));
 }
コード例 #7
0
 public void NullableDateTimeWithNull() {
     var q = new SolrQueryByRange<DateTime?>("ts", null, new DateTime(2002, 3, 4, 5, 6, 7));
     Assert.AreEqual("ts:[* TO 2002-03-04T05:06:07Z]", Serialize(q));
 }
コード例 #8
0
 public void NullableDateTime() {
     var q = new SolrQueryByRange<DateTime?>("ts", new DateTime(2001, 1, 5), new DateTime(2002, 3, 4, 5, 6, 7));
     Assert.AreEqual("ts:[2001-01-05T00:00:00Z TO 2002-03-04T05:06:07Z]", Serialize(q));
 }
コード例 #9
0
 public void NullableFloat() {
     var q = new SolrQueryByRange<float?>("price", null, 234.56f);
     Assert.AreEqual("price:[* TO 234.56]", Serialize(q));
 }
コード例 #10
0
 public void IntLowerExclusiveUpperExclusiveWithNull()
 {
     var q = new SolrQueryByRange<int?>("id", 123, null, false, false);
     Assert.AreEqual("id:{123 TO *}", Serialize(q));
 }
コード例 #11
0
        public void IntLowerExclusiveUpperExclusive()
        {
            var q = new SolrQueryByRange <int>("id", 123, 456, false, false);

            Assert.AreEqual("id:{123 TO 456}", Serialize(q));
        }
コード例 #12
0
 public void StringInclusive()
 {
     var q = new SolrQueryByRange<string>("id", "Arroz", "Zimbabwe");
     Assert.AreEqual("id:[Arroz TO Zimbabwe]", q.Query);
 }
コード例 #13
0
 public void IntInclusive()
 {
     var q = new SolrQueryByRange<int>("id", 123, 456);
     Assert.AreEqual("id:[123 TO 456]", q.Query);
 }
コード例 #14
0
 public void DateTimeInclusive()
 {
     var q = new SolrQueryByRange<DateTime>("ts", new DateTime(2001, 1, 5), new DateTime(2002, 3, 4, 5, 6, 7));
     Assert.AreEqual("ts:[2001-01-05T00:00:00Z TO 2002-03-04T05:06:07Z]", q.Query);
 }
コード例 #15
0
ファイル: Tests.cs プロジェクト: 7digital/SolrNet
        public void Add_then_query()
        {
            const string name = "Samsuñg SpinPoint P120 SP2514N - hárd drívè - 250 GB - ÁTÀ-133";
            var guid = new Guid("{78D734ED-12F8-44E0-8AA3-8CA3F353998D}");
            var p = new Product {
                Id = "SP2514N",
                Guid = guid,
                Name = name,
                // testing UTF
                Manufacturer = "Samsung Electronics Co. Ltd.",
                Categories = new[] {
                    "electronics",
                    "hard drive",
                },
                Features = new[] {
                    "7200RPM, 8MB cache, IDE Ultra ATA-133",
                    "NoiseGuard, SilentSeek technology, Fluid Dynamic Bearing (FDB) motor",
                    "áéíóúñç & two", // testing UTF
                    @"ÚóÁ⌠╒""ĥÛē…<>ܐóジャストシステムは、日本で初めてユニコードベースのワードプロセ ッサーを開発しました。このことにより、10年以上も前から、日本のコンピューターユーザーはユニコード、特に日中韓の統合漢 字の恩恵を享受してきました。ジャストシステムは現在、”xfy”というJava環境で稼働する 先進的なXML関連製品の世界市場への展開を積極的に推進していますが、ユニコードを基盤としているために、”xfy”は初めから国際化されているのです。ジャストシステムは、ユニコードの普遍的な思想とアーキテクチャに 感謝するとともに、その第5版の刊行を心から歓迎します",
                    @"control" + (char)0x07 + (char)0x01 + (char)0x0E +(char)0x1F + (char)0xFFFE, // testing control chars
                },
                Prices = new Dictionary<string, decimal> {
                    {"regular", 150m},
                    {"afterrebate", 100m},
                },
                Price = 92,
                Popularity = 6,
                InStock = true,
                DynCategories = new Dictionary<string, ICollection<string>> {
                    {"t", new[] {"something"}},
                }
            };

            var solr = ServiceLocator.Current.GetInstance<ISolrOperations<Product>>();
            solr.Delete(SolrQuery.All);
            solr.AddWithBoost(p, 2.2);
            solr.Commit();

            //solr.Query(new SolrQueryByField("name", @"3;Furniture"));
            AbstractSolrQuery abstractSolrQuery = new SolrQueryByRange<decimal>("price", 10m, 100m).Boost(2);
            var products = solr.Query(abstractSolrQuery);
            Assert.AreEqual(1, products.Count);
            Assert.AreEqual(name, products[0].Name);
            Assert.AreEqual("SP2514N", products[0].Id);
            Assert.AreEqual(guid, products[0].Guid);
            Assert.AreEqual(92m, products[0].Price);
            Assert.IsNotNull(products[0].Prices);
            Assert.AreEqual(2, products[0].Prices.Count);
            Assert.AreEqual(150m, products[0].Prices["regular"]);
            Assert.AreEqual(100m, products[0].Prices["afterrebate"]);
            Assert.IsNotNull(products.Header);
            Assert.That(products.Header.QTime, Is.GreaterThan(0));
            Console.WriteLine("QTime is {0}", products.Header.QTime);
        }
コード例 #16
0
        public void IntLowerExclusiveUpperInclusiveWithNull()
        {
            var q = new SolrQueryByRange <int?>("id", 123, null, false, true);

            Assert.AreEqual("id:{123 TO *]", Serialize(q));
        }
コード例 #17
0
        private SolrFacetQuery[] FacetQueryCategories(Int32 minHomeRuns)
        {
            var salaryFacet1 = new SolrQueryByRange<Int32>("salary", 0, 1000000);
            var salaryFacet2 = new SolrQueryByRange<Int32>("salary", 1000001, 5000000);
            var salaryFacet3 = new SolrQueryByRange<Int32>("salary", 5000001, 10000000);
            var salaryFacet4 = new SolrQueryByRange<Int32>("salary", 10000001, 100000000);

            var yearFacet1 = new SolrQueryByRange<Int32>("year", 1950, 1959);
            var yearFacet2 = new SolrQueryByRange<Int32>("year", 1960, 1969);
            var yearFacet3 = new SolrQueryByRange<Int32>("year", 1970, 1979);
            var yearFacet4 = new SolrQueryByRange<Int32>("year", 1980, 1989);
            var yearFacet5 = new SolrQueryByRange<Int32>("year", 1990, 1999);
            var yearFacet6 = new SolrQueryByRange<Int32>("year", 2000, 2009);
            var yearFacet7 = new SolrQueryByRange<Int32>("year", 2010, 2013);

            var hrFacet1 = new SolrQueryByRange<Int32>("homeruns", minHomeRuns, minHomeRuns + 10);
            var hrFacet2 = new SolrQueryByRange<Int32>("homeruns", minHomeRuns + 11, minHomeRuns + 30);
            var hrFacet3 = new SolrQueryByRange<Int32>("homeruns", minHomeRuns + 31, minHomeRuns + 40);
            var hrFacet4 = new SolrQueryByRange<Int32>("homeruns", minHomeRuns + 41, minHomeRuns + 80);

            var doubleFacet1 = new SolrQueryByRange<Int32>("doubles", 0, 20);
            var doubleFacet2 = new SolrQueryByRange<Int32>("doubles", 21, 40);
            var doubleFacet3 = new SolrQueryByRange<Int32>("doubles", 41, 60);

            return new[] {
                        new SolrFacetQuery(salaryFacet1),
                        new SolrFacetQuery(salaryFacet2),
                        new SolrFacetQuery(salaryFacet3),
                        new SolrFacetQuery(salaryFacet4),
                        new SolrFacetQuery(yearFacet1),
                        new SolrFacetQuery(yearFacet2),
                        new SolrFacetQuery(yearFacet3),
                        new SolrFacetQuery(yearFacet4),
                        new SolrFacetQuery(yearFacet5),
                        new SolrFacetQuery(yearFacet6),
                        new SolrFacetQuery(yearFacet7),
                        new SolrFacetQuery(hrFacet1),
                        new SolrFacetQuery(hrFacet2),
                        new SolrFacetQuery(hrFacet3),
                        new SolrFacetQuery(hrFacet4),
                        new SolrFacetQuery(doubleFacet1),
                        new SolrFacetQuery(doubleFacet2),
                        new SolrFacetQuery(doubleFacet3)
                    };
        }
コード例 #18
0
 public void FloatInclusive()
 {
     var q = new SolrQueryByRange<float>("price", 123.45f, 234.56f);
     Assert.AreEqual("price:[123.45 TO 234.56]", q.Query);
 }
コード例 #19
0
 public void RangeQuery() {
     var q = new SolrQueryByRange<decimal>("price", 100, 200);
     var requiredq = new SolrRequiredQuery(q);
     Assert.AreEqual("+price:[100 TO 200]", Serialize(requiredq));
 }
コード例 #20
0
 public void StringExclusive()
 {
     var q = new SolrQueryByRange<string>("id", "Arroz", "Zimbabwe", false);
     Assert.AreEqual("id:{Arroz TO Zimbabwe}", q.Query);
 }
コード例 #21
0
ファイル: SolrNotQueryTests.cs プロジェクト: emargee/SolrNet
 public void RangeQuery()
 {
     var q = new SolrQueryByRange<decimal>("price", 100, 200);
     var notq = new SolrNotQuery(q);
     Assert.AreEqual("-price:[100 TO 200]", Serialize(notq));
 }
コード例 #22
0
        public ICollection<ISolrQuery> BuildFilterQueries(SearchParam parameters)
        {
            var queriesFromFacets = from p in parameters.Facets
                                    select (ISolrQuery)Query.Field(p.Key).Is(p.Value);

            List<ISolrQuery> filter = new List<ISolrQuery>();
            filter = queriesFromFacets.ToList();
            //    parameters.PickUpDateSearch = Convert.ToDateTime("2015-01-10 04:33:41.040"); //to be taken out later
            var Day1 = new SolrQueryByRange<DateTime>("PickUpTime", Common.AbsoluteStart(parameters.PickUpDateSearch), Common.AbsoluteEnd(parameters.PickUpDateSearch.AddDays(90)));
            filter.Add((ISolrQuery)Day1);

            return filter;
        }
コード例 #23
0
    public void Method1()
    {
        var serviceProvider = ((IServiceProvider)Startup.Container);

        if (serviceProvider == null)
        {
            return;
        }

        var solrOperation = serviceProvider.GetService(typeof(ISolrReadOnlyOperations <MySampleItem>));

        if (solrOperation == null)
        {
            return;
        }

        ISolrReadOnlyOperations <MySampleItem> solr = (ISolrReadOnlyOperations <MySampleItem>)solrOperation;
        SearchParameters parameters = new SearchParameters();

        parameters.FreeSearch = txtSearch.Text;
        DateTime currentdate     = DateTime.Now;
        var      facetweek       = new SolrQueryByRange <DateTime?>("date", new DateTime(currentdate.Year, currentdate.Month, currentdate.Day).AddDays(-7), new DateTime(currentdate.Year, currentdate.Month, currentdate.Day));
        var      facetyear       = new SolrQueryByRange <DateTime?>("date", new DateTime(currentdate.Year, currentdate.Month, currentdate.Day).AddYears(-1), new DateTime(currentdate.Year, currentdate.Month, currentdate.Day));
        var      facetmonth      = new SolrQueryByRange <DateTime?>("date", new DateTime(currentdate.Year, currentdate.Month, currentdate.Day).AddMonths(-1), new DateTime(currentdate.Year, currentdate.Month, currentdate.Day));
        var      start           = (parameters.PageIndex - 1) * parameters.PageSize;
        var      matchingRecords = solr.Query(BuildQuery(parameters), new QueryOptions
        {
            ExtraParams = new Dictionary <string, string>
            {
                { "fq", "-type file)  roles 1)" },
                { "group.truncate", "true" },
            },
            Highlight = new HighlightingParameters {
            },
            Grouping  = new GroupingParameters()
            {
                Fields  = new[] { "collapse" },
                Ngroups = true,
            },
            FilterQueries = BuildFilterQueries(parameters),
            Rows          = parameters.PageSize,
            Facet         = new FacetParameters
            {
                Queries = new ISolrFacetQuery[]
                {
                    new SolrFacetFieldQuery("category")
                    {
                        MinCount = 0, Limit = 12, Offset = 0, Sort = true
                    },
                    new SolrFacetFieldQuery("user")
                    {
                        MinCount = 1, Limit = 12, Offset = 0, Sort = true
                    },
                    new SolrFacetFieldQuery("group")
                    {
                        MinCount = 1, Limit = 12, Offset = 0, Sort = true
                    },
                    new SolrFacetFieldQuery("tag")
                    {
                        MinCount = 1, Limit = 12, Offset = 0, Sort = true
                    },
                    new SolrFacetQuery(facetweek),
                    new SolrFacetQuery(facetyear),
                    new SolrFacetQuery(facetmonth),
                }
            },
        });
    }