Very interesting ! I'm working on some date-range buckets myself and never considered using the query itself to define the buckets.
---------------------------------------- David A. Lee Senior Principal Software Engineer Epocrates, Inc. [email protected] 812-482-5224 -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Geert Josten Sent: Thursday, August 11, 2011 4:46 PM To: General MarkLogic Developer Discussion Subject: Re: [MarkLogic Dev General] Date range constraint a la MarkMail Nobody? I thought of a way to calculate the buckets dynamically. I would reckon there should be a smarter way, but it seems to work alright, and fast enough.. let $dates := fn:analyze-string($q, 'date:[^ ]+')/*:match/text() let $q := search:parse($q, <options xmlns="http://marklogic.com/appservices/search"> <constraint name="date"> <range type="xs:dateTime"> <element ns="http://grtjn.nl/twitter/utils" name="published"/> <attribute ns="" name="iso-date"/> { for $date in $dates let $date := fn:substring-after($date, 'date:') return if (fn:matches($date, '^\d\d\d\d$')) then <bucket name="{$date}" ge="{$date}-01-01T00:00:00Z" lt="{fn:number($date) + 1}-01-01T00:00:00Z">{$date}</bucket> else if (fn:matches($date, '^\d\d\d\d-\d\d\d\d$')) then let $start-year := fn:substring-before($date, '-') let $end-year := fn:substring-after($date, '-') return <bucket name="{$date}" ge="{$start-year}-01-01T00:00:00Z" lt="{fn:number($end-year) + 1}-01-01T00:00:00Z">{$date}</bucket> else if (fn:matches($date, '^\d\d\d\d\d\d$')) then let $year := fn:substring($date, 1, 4) let $month := fn:substring($date, 5, 2) let $end-date := xs:dateTime(fn:concat($year, "-", $month, "-01T00:00:00Z")) + xs:yearMonthDuration ("P1M") return <bucket name="{$date}" ge="{$year}-{$month}-01T00:00:00Z" lt="{$end-date}">{$date}</bucket> (etc..) Feedback welcome.. Kind regards, Geert -----Oorspronkelijk bericht----- Van: [email protected] [mailto:[email protected]] Namens Geert Josten Verzonden: woensdag 10 augustus 2011 17:25 Aan: General MarkLogic Developer Discussion ([email protected]) Onderwerp: [MarkLogic Dev General] Date range constraint a la MarkMail Hi, I'd like to use the search library to support easy entry of date range search terms, like date:201101-201108 (as in MarkMail). How should my 'date' constraint look like? Any examples online? Kind regards, Geert _______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general _______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general _______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
