Sorry - didn't finish my thought. I need to address querying :) So using the above to define what's in the index your queries for a day/time become a CONTAINS operation against the field. Let's say that the field is defined as a location_rpt using JTS and its Spatial Factory (which supports polygons) - oh, and it would need to be multi-valued. Querying the field would require first translating "now" or "in an hour" or "Monday at 9am" to a geocode, then hitting the index with a CONTAINS request per the docs:
https://cwiki.apache.org/confluence/display/solr/Spatial+Search On Wed, Aug 26, 2015 at 11:23 AM, Darren Spehr <[email protected]> wrote: > Sure - and sorry for its density. I reread it and thought the same ;) > > So imagine a polygon of say 1/2 mile width (I made that up) that stretches > around the equator. Let's call this a week's timeline and subdivide it into > 7 blocks, one for each day. For the sake of simplicity assume it's a line > (which I forget but is supported in Solr as an infinitely small polygon) > starting at (0,-180) for Monday at 12:00 AM and ending back at (0,180) for > Sunday at 11:59 PM. By subdivide you can think of it either radially or by > longitude, but you have 360 degrees to divide into 7, which means that > every hour is represented by a range of roughly 2.143 degrees (360/7/24). > These regions represent each day and hour (or less), and the region > boundaries represent midnight for the day before. > > Now for indexing - your open hours then become a combination of these > subdivisions. If you're open 24x7 then the whole polygon is indexed. If > you're only open on Monday from 9-5 then only the polygon between > (0,-160.7) and (0,-143.57) is indexed. With careful attention to detail you > can index any combination of times this way. > > So now the varsity question is how to do this with a fluctuating calendar? > I think this example can be extended to include searching against any given > day of the week in a year, or years. Just imagine a translation layer that > adjusts the latitude N or S by some amount to represent which day in which > year you're looking for. Make sense? > > On Wed, Aug 26, 2015 at 10:50 AM, Upayavira <[email protected]> wrote: > >> "delightfully dense" = really intriguing, but I couldn't quite >> understand it - really hoping for more info >> >> On Wed, Aug 26, 2015, at 03:49 PM, Upayavira wrote: >> > Darren, >> > >> > That was delightfully dense. Do you think you could unpack it a bit >> > more? Possibly some sample (pseudo) queries? >> > >> > Upayavira >> > >> > On Wed, Aug 26, 2015, at 03:02 PM, Darren Spehr wrote: >> > > If you wanted to try a spatial approach that blended times like above, >> > > you >> > > could try a polygon of minimum width that spans the globe - this is >> > > literally using spatial search (geocodes) against time. So in this >> > > scenario >> > > you logically subdivide the polygon into 7 distinct regions (for days) >> > > and >> > > then within this you can defined, like a timeline, what open and >> closed >> > > means. The problem of 3AM is taken care of because of it's continuous >> > > nature - ie one day is adjacent to the next, with Sunday and Monday >> > > backing >> > > up to each other. Just a thought. >> > > >> > > On Wed, Aug 26, 2015 at 5:38 AM, Upayavira <[email protected]> wrote: >> > > >> > > > >> > > > >> > > > On Wed, Aug 26, 2015, at 10:17 AM, O. Klein wrote: >> > > > > Those options don't fix my problem with closing times the next >> morning, >> > > > > or is >> > > > > there a way to do this? >> > > > >> > > > Use the spatial model, and a time window of a week. There are 10,080 >> > > > minutes in a week, so you could use that as your scale. >> > > > >> > > > Assuming the week starts at 00:00 Monday morning, you might index >> Monday >> > > > 9:00-23:00 as 540:1380 >> > > > >> > > > Tuesday 9am-Wednesday 1am would be 1980:2940 >> > > > >> > > > You convert your NOW time into a "minutes since Monday 00:00" and >> do a >> > > > spatial search within that time. >> > > > >> > > > If it is now Monday, 11:23am, that would be 11*60+23=683, so you >> would >> > > > do a search for 683:683. >> > > > >> > > > If you have a shop that is open over Sunday night to Monday, you >> just >> > > > list it as open until Sunday 23:59 and open again Monday 00:00. >> > > > >> > > > Would that do it? >> > > > >> > > > Upayavira >> > > > >> > > >> > > >> > > >> > > -- >> > > Darren >> > > > > -- > Darren > -- Darren
