[jsword-devel] Cannot search last 2 verses of Revelation

Chris Burrell chris at burrell.me.uk
Sat Jul 19 05:16:48 MST 2014


The issue with this method here. Lucene relies on getGlobalKeyList, but
that doesn't return the right number of keys. It seems to chop off the end

@Override
    public Key getGlobalKeyList() throws BookException {
        ZVerseBackendState rafBook = null;
        try {
            rafBook = initState();

            String v11nName =
getBookMetaData().getProperty(ConfigEntryType.VERSIFICATION).toString();
            Versification v11n =
Versifications.instance().getVersification(v11nName);

            Testament[] testaments = new Testament[] {
                    Testament.OLD, Testament.NEW
            };

            BitwisePassage passage = new RocketPassage(v11n);
            passage.raiseEventSuppresion();
            passage.raiseNormalizeProtection();

            for (Testament currentTestament : testaments) {
                RandomAccessFile idxRaf =
rafBook.getIdxRaf(currentTestament);

                // If Bible does not contain the desired testament, then
false
                if (idxRaf == null) {
                    // no keys in this testament
                    continue;
                }

                int maxIndex = v11n.getCount(currentTestament) - 1;

                // Read in the whole index, a few hundred Kb at most.
                byte[] temp = SwordUtil.readRAF(idxRaf, 0, IDX_ENTRY_SIZE *
maxIndex);

                // For each entry of 10 bytes, the length of the verse in
bytes
                // is in the last 2 bytes. If both bytes are 0, then there
is no content.
                for (int ii = 0; ii < temp.length; ii += IDX_ENTRY_SIZE) {
                    // This can be simplified to temp[ii + 8] == 0 &&
temp[ii + 9] == 0.
                    // int verseSize = SwordUtil.decodeLittleEndian16(temp,
ii + 8);
                    // if (verseSize > 0) {
                    if (temp[ii + 8] != 0 || temp[ii + 9] != 0) {
                        int ordinal = ii / IDX_ENTRY_SIZE;

passage.addVersifiedOrdinal(v11n.getOrdinal(currentTestament, ordinal));
                    }
                }
            }

            passage.lowerNormalizeProtection();
            passage.lowerEventSuppressionAndTest();

            return passage;
        } catch (IOException e) {
            throw new BookException(JSMsg.gettext("Unable to read key list
from book."));
        } finally {
            OpenFileStateManager.release(rafBook);
        }
    }

Chris



On 19 July 2014 11:15, Martin Denham <mjdenham at gmail.com> wrote:

> For clarification, this is different to the search problem I mentioned
> yesterday.
>
> I won't be able to look at this for at least a few days, and I am not so
> knowledgeable regarding Lucene, so if anybody else fixes it in the mean
> time - great.
>
> Martin
>
>
> On 19 July 2014 09:24, Martin Denham <mjdenham at gmail.com> wrote:
>
>> This bug affects both STEP and And Bible so it probably affects most
>> JSword apps.
>>
>> No search results are returned for the last 2 verses of Revelation.
>>
>> *Examples*
>> If you search for 'Amen'
>> <http://www.stepbible.org/?q=version=ESV%7Ctext=Amen&options=VNHUG&pos=1>
>> you see many results but the last is in Rev 19, not Rev 22 and the last 2
>> verses of Revelation contain Amen.
>>
>> Searching for 'Jesus' in Rev 22
>> <http://www.stepbible.org/?q=version=ESV%7Creference=Rev.22%7Ctext=Jesus&options=VNHUG&pos=1>
>> yields only verse which is verse 16 and omits verses 21 and 22.
>>
>> Martin
>>
>
>
> _______________________________________________
> jsword-devel mailing list
> jsword-devel at crosswire.org
> http://www.crosswire.org/mailman/listinfo/jsword-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.crosswire.org/pipermail/jsword-devel/attachments/20140719/78df3741/attachment-0001.html>


More information about the jsword-devel mailing list