[Xapian-devel] C++ MatchDecider::operator() is const

Richard Boulton richard at lemurconsulting.com
Wed Oct 1 17:54:20 BST 2008


Eric Sellin wrote:
> Hello all,
> 
> Why is MatchDecider::operator() a const in the C++ API?
> 
> An implementation of MatchDecider might want to store stuff in member
> variables so the decision on one document can depend on other decisions
> already made on previous documents.
> 
> There must be a valid reason why it's const but I can't see.

That's a good question.  I'm actually not certain it should be const, 
and perhaps it's something which should be fixed in future.  However, 
fixing it would be a fairly intrusive API change, and would require any 
user subclasses to be updated, so I wouldn't be happy doing this until 
the 2.0 release (and I'm not convinced it's worth the effort, overall). 
  It's easy enough to mark members as mutable in the meantime, if you 
really want to.

Note, however, that Xapian does not give you any guarantees about the 
order in which the match decider is applied to documents, and doesn't 
guarantee that it will be called with all the potential matching 
documents.  (At least, I don't think there's any guarantees about the 
order in which it will be presented with documents in the documentation 
anywhere - I'm willing to be disproved!  It certainly often doesn't see 
all the potential matches.)  Therefore, it's not safe to base the 
decision on previously seen documents.  This is why the const was 
originally introduced, as far as I can recall - to try and make this 
clear to users.

Since matchdeciders were introduced, the "matchspy" parameter has been 
added to get_mset().  This takes a match decider, and can be used to 
select a subset of the potential matches, but is called a bit earlier in 
the match process, and it is guaranteed to be called on at least 
"checkatleast" documents.  The intention is that this allows the 
"matchspy" MatchDecider subclass to be used to count features of the 
supplied documents (for example, the matchspy branch contains some 
matchspies which count the occurrences of values in value slots, which 
can be used to present relevant facets or tags for refining the search 
results).  Of course, a matchspy can only really be useful if it has 
mutable members, which is why I feel it might be reasonable to remove 
the const.

-- 
Richard



More information about the Xapian-devel mailing list