Brilliant! Got some great ideas for this. Indeed all sorts of usecases
which use multiple temporal ranges could benefit..
Eg: Another Guy on stackoverflow asked me about this some days ago.. He
wants to model multiple temporary offers per product (free shopping for
christmas, 20% discount for Black friday , etc) .. All possible with this
out of the box. Factor in 'offer category' in x and y as well for some
extra powerfull querying.
Yup im enthousiastic about it , which im sure you can tell :)
Thanks a lot David,
Cheers,
Geert-Jan
Sent from my iPhone
On 9 dec. 2012, at 05:35, "David Smiley (@MITRE.org) [via Lucene]" <
[hidden email]<UrlBlockedError.aspx>> wrote:
britske wrote
That's seriously awesome!
Some change in the query though:
You described: "To query for a business that is open during at least some
part of a given time duration"
I want "To query for a business that is open during at least the entire
given time duration".
Feels like a small difference but probably isn't (I'm still wrapping my
head on the intersect query I must admit)
So this would be a slightly different rectangle query. Interestingly,
you simply swap the location in the rectangle where you put the start and
end time. In summary:
Indexed span CONTAINS query span:
minX minY maxX maxY -> 0 end start *
Indexed span INTERSECTS (i.e. OVERLAPS) query span:
minX minY maxX maxY -> 0 start end *
Indexed span WITHIN query span:
minX minY maxX maxY -> start 0 * end
I'm using '*' here to denote the max possible value. At some point I
may add that as a feature.
That was a fun exercise! I give you credit in prodding me in this
direction as I'm not sure if this use of spatial would have occurred to me
otherwise.
britske wrote
Moreover, any indication on performance? Should, say, 50.000 docs with
about 100-200 points each (1 a 2 open-close spans per day) be ok? ( I
know
'your mileage may very' etc. but just a guestimate :)
You should have absolutely no problem. The real clincher in your favor
is the fact that you only need 9600 discrete time values (so you said), not
Long.MAX_VALUE. Using Long.MAX_VALUE would simply not be possible with the
current implementation because it's using Doubles which has 52 bits of
precision not the 64 that would be required to be a complete substitute for
any time/date. Even given the 52 bits, a quad SpatialPrefixTree with
maxLevels="52" would probably not perform well or might fail; not sure.
Eventually when I have time to work on an implementation that can be based
on a configurable number of grid cells (not unlike how you can configure
precisionStep on the Trie numeric fields), 52 should be no problem.
I'll have to remember to refer back to this email on the approach if I
create a field type that wraps this functionality.
~ David
britske wrote
Again, this looks good!
Geert-Jan
2012/12/8 David Smiley (@MITRE.org) [via Lucene] <
[hidden email]>
Hello again Geert-Jan!
What you're trying to do is indeed possible with Solr 4 out of the box.
Other terminology people use for this is multi-value time duration.
This
creative solution is a pure application of spatial without the
geospatial
notion -- we're not using an earth or other sphere model -- it's a flat
plane. So no need to make reference to longitude & latitude, it's x &
y.
I would put opening time into x, and closing time into y. To express a
point, use "x y" (x space y), and supply this as a string to your
SpatialRecursivePrefixTreeFieldType based field for indexing. You can
give
it multiple values and it will work correctly; this is one of RPT's
main
features that set it apart from Solr 3 spatial. To query for a
business
that is open during at least some part of a given time duration, say
6-8
o'clock, the query would look like openDuration:"Intersects(minX minY
maxX
maxY)" and put 0 or minX (always), 6 for minY (start time), 8 for maxX
(end time), and the largest possible value for maxY. You wouldn't
actually
use 6 & 8, you'd use the number of 15 minute intervals since your
epoch for
this equivalent time span.
You'll need to configure the field correctly: geo="false"
worldBounds="0 0
maxTime maxTime" substituting an appropriate value for maxTime based on
your unit of time (number of 15 minute intervals you need) and
distErrPct="0" (full precision).
Let me know how this works for you.
~ David
Author:
http://www.packtpub.com/apache-solr-3-enterprise-search-server/book
Author:
http://www.packtpub.com/apache-solr-3-enterprise-search-server/book
If you reply to this email, your message will be added to the discussion
below:
http://lucene.472066.n3.nabble.com/Modeling-openinghours-using-multipoints-tp4025336p4025434.html
To unsubscribe from Modeling openinghours using multipoints, click here.
NAML
--
View this message in context:
http://lucene.472066.n3.nabble.com/Modeling-openinghours-using-multipoints-tp4025336p4025454.html
Sent from the Solr - User mailing list archive at Nabble.com.