[sword-devel] search function?
Troy A. Griffitts
scribe at crosswire.org
Thu Sep 30 23:39:09 MST 2004
One last thing. Have you tried the Lucene feature that you can enable
in the build? It makes many search scenerios return fairly
Troy A. Griffitts wrote:
> Sure! We'd always love the help. Briefly, (this assumes you
> understand the SWModule/SWKey construct in the API) a key has the
> concept of a numeric index(). Basically, the current modus opperandi in
> SWModule::search is to set the module to the end, check the module's
> key->index() and use that as the high value. Then, set the module to
> the beginning and start the search. After performing the search for an
> individual entry, the key->index() is checked to see where we're at, do
> the math, and report the %.
> A different way to do this would be to add an
> SWModule::entryCount(), use that as the high count, and merely have an
> int pos that we pos++ while iterating during the search.
> You'd need to try to provide a basic impl in SWModule::entryCount
> and possibly override with a better method for Bibles in
> SWText::entryCount or SWLexDict::entryCount for Bibles, or maybe even
> make it pure virtual and force the drivers to supply the information.
> The danger to consider is that we are adding the requirement for an
> SWModule to be able to calculate the number of entries total in it's
> range. This is not the case for many types of keys, e.g. keys for
> Keys cannot always do this for the module. A VerseKey for a
> canonization probably can do this, so Bibles can likely rely on their
> key to report this to them (so your search range in VerseKey could
> adjust). But, for a lexicon it's different. A lexicon knows how many
> entries it has in it (probably), but the key is merely a StrKey. It is
> not SWKey::isTraversible(). The Lexicon is traversable, but the key,
> all by itself, is not traversible. To try to be clear:
> VerseKey::isTraversible() == true
> because it means something to say "John 3:16"++ OUTSIDE of any given Bible.
> StrKey::isTraversible() == false
> because is does NOT mean something to say "Jerusalem"++ OUTSIDE of any
> given module.
> Sorry, most of this is just random information. I'd be happy to discuss
> or look at any solution you might submit.
> Kevin Field wrote:
>> Hi Troy,
>> Ah, that makes sense, as we've always been passing a scope. I guess
>> the best thing to do would be to not provide a scope if the scope is
>> just going to be the whole Bible anyway. Better yet, could I help get
>> that into the Sword library itself? From there I could go to getting
>> it working if it's a single range, and then multiple ranges wouldn't
>> be too much harder.
>>> The status callback mechanism does good in many scenerios, and
>>> not so good in others. We hope to improve it. A case where I
>>> remember it acting as you have posted is when one provides a search
>>> 'scope'. We haven't added the logic to try to figure out the
>>> complete domain of the search scope (e.g.
>>> "gen-deut;1jn;rev1:1-5:19"). So we don't really have the data to
>>> report a %. It's not that it can't be done, but just hasn't been
>>> done yet. Hope this helps.
>> sword-devel mailing list
>> sword-devel at crosswire.org
> sword-devel mailing list
> sword-devel at crosswire.org
More information about the sword-devel