Esempio n. 1
0
        public RangeFacetingResult ParseRangeFacetingNode(XElement node)
        {
            var r         = new RangeFacetingResult();
            var intParser = new IntFieldParser();

            foreach (var rangeFacetingNode in node.Elements())
            {
                var name = rangeFacetingNode.Attribute("name").Value;
                switch (name)
                {
                case "gap":
                    r.Gap = rangeFacetingNode.Value;
                    break;

                case "start":
                    r.Start = rangeFacetingNode.Value;
                    break;

                case "end":
                    r.End = rangeFacetingNode.Value;
                    break;

                case "counts":
                    foreach (var item in rangeFacetingNode.Elements())
                    {
                        r.RangeResults.Add(KV.Create(item.Attribute("name").Value, (int)intParser.Parse(item, typeof(int))));
                    }
                    break;

                default:
                    //collect FacetRangeOther items
                    if (rangeFacetingNode.Name != "int")
                    {
                        break;
                    }

                    var count = (int)intParser.Parse(rangeFacetingNode, typeof(int));
                    if (name == FacetDateOther.After.ToString())
                    {
                        r.OtherResults[FacetRangeOther.After] = count;
                    }
                    else if (name == FacetDateOther.Before.ToString())
                    {
                        r.OtherResults[FacetRangeOther.Before] = count;
                    }
                    else if (name == FacetDateOther.Between.ToString())
                    {
                        r.OtherResults[FacetRangeOther.Between] = count;
                    }
                    break;
                }
            }
            return(r);
        }
Esempio n. 2
0
        public DateFacetingResult ParseDateFacetingNode(XElement node)
        {
            var r          = new DateFacetingResult();
            var dateParser = new DateTimeFieldParser();
            var intParser  = new IntFieldParser();

            foreach (var dateFacetingNode in node.Elements())
            {
                var name = dateFacetingNode.Attribute("name").Value;
                switch (name)
                {
                case "gap":
                    r.Gap = dateFacetingNode.Value;
                    break;

                case "end":
                    r.End = (DateTime)dateParser.Parse(dateFacetingNode, typeof(DateTime));
                    break;

                default:
                    // Temp fix to support Solr 3.1, which has added a new element <date name="start">...</date>
                    // not seen in Solr 1.4 to the facet date response – just ignore this element.
                    if (dateFacetingNode.Name != "int")
                    {
                        break;
                    }

                    var count = (int)intParser.Parse(dateFacetingNode, typeof(int));
                    if (name == FacetDateOther.After.ToString())
                    {
                        r.OtherResults[FacetDateOther.After] = count;
                    }
                    else if (name == FacetDateOther.Before.ToString())
                    {
                        r.OtherResults[FacetDateOther.Before] = count;
                    }
                    else if (name == FacetDateOther.Between.ToString())
                    {
                        r.OtherResults[FacetDateOther.Between] = count;
                    }
                    else
                    {
                        var d = dateParser.ParseDate(name);
                        r.DateResults.Add(KV(d, count));
                    }
                    break;
                }
            }
            return(r);
        }
Esempio n. 3
0
        public DateFacetingResult ParseDateFacetingNode(XElement node)
        {
            var r          = new DateFacetingResult();
            var dateParser = new DateTimeFieldParser();
            var intParser  = new IntFieldParser();

            foreach (var dateFacetingNode in node.Elements())
            {
                var name = dateFacetingNode.Attribute("name").Value;
                switch (name)
                {
                case "gap":
                    r.Gap = dateFacetingNode.Value;
                    break;

                case "end":
                    r.End = (DateTime)dateParser.Parse(dateFacetingNode, typeof(DateTime));
                    break;

                default:
                    var count = (int)intParser.Parse(dateFacetingNode, typeof(int));
                    if (name == FacetDateOther.After.ToString())
                    {
                        r.OtherResults[FacetDateOther.After] = count;
                    }
                    else if (name == FacetDateOther.Before.ToString())
                    {
                        r.OtherResults[FacetDateOther.Before] = count;
                    }
                    else if (name == FacetDateOther.Between.ToString())
                    {
                        r.OtherResults[FacetDateOther.Between] = count;
                    }
                    else
                    {
                        var d = dateParser.ParseDate(name);
                        r.DateResults.Add(KV(d, count));
                    }
                    break;
                }
            }
            return(r);
        }