#read: for magma reader

Sebastian Sastre ssastre at seaswork.com
Tue Feb 12 14:40:27 UTC 2008


Hi there,

	I have a kind of object stored on magmacollections which has been
indexed by an attribute which returns N dates. I've made an index which is
pretty much like MaKeywordIndex but for DateAndTimes.

	It works well. Now I need a metric on those objects to score them
regarding to the number of ocurrences of the dates they will be found on the
odb. So I have:

scoringLevel
	"Answers the quantity of dates of some relevance for the receiver."

	^ ((self elements where:[:reader|
		(reader 
			read: #relevantDates
			from: (Date today subtractDays: self daysBack)
asDateAndTime 
			to: DateAndTime now)])
				distinct: true) size

	by now I've set 2 years by answering 360*2 in daysBack but what if I
want the socing for whole thing?

	I've tried #read: without parameters other than the index name but
then I've realized is not implemented in magma reader. I wish I can do
something to count occurrences of my query like:

scoringLevel
	"Answers the quantity of dates of some relevance for the receiver."

	^ ((self elements where:[:reader|
		reader read: #relevantDates])
			distinct: true) size


So taking a look in the reader and indexes I figured I put in my
*MagmaExtensions this method:

MagmaCollectionReader>>read: attributeSymbol
	"Answers a MaLargeCollectionReader with access to all its elements.
	NOTE: warning, is the whole thing, use smartly"

	^ [:index| 
		self
			readIndex: index
			fromHash: index lowestPossibleKey 
			toHash: index highestPossibleKey] value: (self
indexNamed: attributeSymbol)

	But this it's returning a MaClause and no a reader as expected? Any
clue on whats happening?

	thanks,

Sebastian Sastre





More information about the Magma mailing list