marvin at rectangular
Jul 1, 2007, 4:25 PM
On Jul 1, 2007, at 10:37 AM, Hans Dieter Pearcey wrote:
> I've just uploaded KSx-IndexManager 0.001.
I see that this module is now visible on search.cpan.org. (: ...and
so is KSx::Searcher::Abstract. :)
Cool stuff! The way it combines both indexing and searching reminds
me of Ferret::Index [.that's a Ruby class for those of you unfamiliar
with Ferret] and Plucene::Simple (upon which KinoSearch::Simple is
loosely based). It's more like Ferret::Index, though, in that it
doesn't hide the interfaces of the classes it replaces -- you still
need to grok Schema, InvIndexer, Searcher, Hits, and implicitly,
FieldSpec and PolyAnalyzer in order to use it.
> I wrote this because I wanted to call fewer methods in code that
> dealt with
> invindexes (both reading and writing).
I can certainly see how using it will result in less code. You and I
appear to have different, but complementary ideas about class design,
and I'm cheesed to see your alternative approach. :)
KinoSearch has a few convenience methods here and there, notably
Schema->open and friends. For the most part, though, I try to avoid
* Fewer moving parts, so fewer things can go wrong.
* Less work before users feel confident that they've grokked an
entire class and acquire a sense of mastery over it.
Convenience methods are a burden if you don't actually use them, and
different people often have different ideas about what's convenient.
I think KinoSearch itself needs to stay streamlined and low-level
enough that people such as yourself have no trouble assembling KS
components into larger tools.
However, I also find a lot of what you've done attractive. Those
write() and append() methods are pretty slick! On some level, it
would be nice to add them to InvIndexer itself, along with add_docs()
-- but having them available via your module distro is even better!
> Compare eg/invindex.pl to KinoSearch's
> sample/invindex.plx to get an idea of what IndexManager covers.
I think that file is actually missing from your distro. It's easy
for me at least to see what's going on, but can you please forward
some sample code to the list?
In addition to the minimalist apps, I'd like to see an example of how
you would use KSx::IndexManager::Plugin::Partition to choose one
invindex from among many at both index-time and search-time. KS has
MultiSearcher, but it doesn't provide a stock answer for how to
multiplex indexing; perhaps you've come up with a good model.