[sword-devel] search function?

Troy A. Griffitts scribe at crosswire.org
Thu Sep 30 23:39:09 MST 2004


Kev,
	One last thing.  Have you tried the Lucene feature that you can enable 
in the build?  It makes many search scenerios return fairly 
instantaneous.  :)

	-Troy.


Troy A. Griffitts wrote:

> Kev,
>     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 
> lexicons.
> 
> 
> 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.
> 
>     -Troy.
> 
> 
> 
> 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.
>>
>> Thanks,
>>
>> Kev
>>
>>
>>> Kev,
>>>     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.
>>>
>>>     -Troy.
>>
>>
>>
>> _______________________________________________
>> sword-devel mailing list
>> sword-devel at crosswire.org
>> http://www.crosswire.org/mailman/listinfo/sword-devel
> 
> _______________________________________________
> sword-devel mailing list
> sword-devel at crosswire.org
> http://www.crosswire.org/mailman/listinfo/sword-devel


More information about the sword-devel mailing list