<html><head><base href="x-msg://260/"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Feb 25, 2010, at 8:51 PM, <a href="mailto:trent.jsword@trentonadams.ca">trent.jsword@trentonadams.ca</a> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><span class="Apple-style-span" style="border-collapse: separate; font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><div><div style="font-family: Courier; font-size: 12pt; color: rgb(0, 0, 0); ">This is not the fastest way I'm sure, but it did take 13 seconds.&nbsp; I don't know much about jsword yet, but I'm going to see if I can load entire books at a time, and go through them verse by verse.&nbsp; Bulk loading would likely be much faster.<br></div></div></span></blockquote><div><br></div>The problem with bulk loading is the assumption that SWORD has stored the verse in order. This is generally true, but not guaranteed.</div><div><br></div><div>We thought about giving the "engine" a passage to get and have it return the whole passage, but we haven't done that. JSword does have an optimization that when a block of compressed data is read, it is cached in core. If the next reference is for the same block, it is read from cache. This is the nature of compressed modules.</div><div><br></div><div>The shortcoming with the following is the setup to get the verse. It would be better to iterate over a bitmap holding a reference to the whole Bible.</div><div><br></div><div>See BookExporter for &nbsp;an example of iterating over the entire KJV efficiently:</div><div><a href="http://www.crosswire.org/jsword/java2html/org/crosswire/jsword/bridge/BookExporter.java.html">http://www.crosswire.org/jsword/java2html/org/crosswire/jsword/bridge/BookExporter.java.html</a></div><div><br></div><div>The other problem with your example is that each call to matches recompile the pattern. Hoist the pattern outside of the loop and it should be even faster.</div><div><br></div><div>A minor nit. OSISUtil.getPlainText(data.getOsisFragment()) will get titles and other non-canonical text. You probably want OSISUtil.getCanonicalText(data.getOsisFragment()); (Note, this will get canonical Psalm titles.)</div><div><br></div><div>Putting it together it would be something like:</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>&nbsp;&nbsp;&nbsp;Book book = Books.installed().getBook("KJV");</div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Key keys = <span style="color: #2600c9">book</span>.getGlobalKeyList();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; min-height: 15px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; Iterator iter = keys.iterator();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; StringBuffer buf = <span style="color: #8e0667">new</span> StringBuffer();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(74, 0, 251); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">        </span>Pattern </span><span style="color: #2600c9">searchPattern</span><span style="color: #000000"> = Pattern.compile(</span>"wash.*word"<span style="color: #000000">);</span></div></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #8e0667">while</span> (iter.hasNext()) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Key key = (Key) iter.next();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;BookData data = <span style="color: #8e0667">new</span> BookData(book, key);</div><div><br></div></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String plainText = <font class="Apple-style-span" color="#2600C9">OSISUtil.getCanonicalText(data.getOsisFragment())</font>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #8e0667">if</span> (plainText&nbsp;!= <span style="color: #8e0667">null</span> &amp;&amp;&nbsp;plainText.trim().length() &gt; 0) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Matcher m = <span style="color: #2600c9">searchPattern</span>.matcher(plainText);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;if (m.find()) {</div></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;buf.delete(0, buf.length());</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;buf.append(key).append(<span style="color: #4a00fb">':'</span>).append(plainText); <span style="color: #559173">//$NON-NLS-1$</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.<span style="color: #2600c9">out</span>.println(buf.toString());</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">&nbsp; &nbsp; &nbsp; &nbsp; }</div><div><font class="Apple-style-span" face="Monaco" size="3"><span class="Apple-style-span" style="font-size: 11px; "><br></span></font></div><div><font class="Apple-style-span" face="Monaco" size="3"><span class="Apple-style-span" style="font-size: 11px;">Note this should work for all modules. Not just Bibles.</span></font></div></div><div><br></div><div>In Him,</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>DM</div><div><br><blockquote type="cite"><div><div style="font-family: Courier; font-size: 12pt; color: rgb(0, 0, 0); "><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Book book = Books.installed().getBook("KJV");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (book == null)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.exit(1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long before;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long after;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; before = System.currentTimeMillis();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int bookIndex = 1; bookIndex &lt;= 66; bookIndex++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp; // all books<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int maxChapters = BibleInfo.chaptersInBook(bookIndex);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int chapter = 1; chapter &lt; maxChapters; chapter++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int maxVerses = BibleInfo.versesInChapter(bookIndex, chapter);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int verse = 1; verse &lt; maxVerses; verse++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String bookName = BibleInfo.getBookName(<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bookIndex).getLongName();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Passage versePassage = (Passage) book.getKey(bookName + " " + chapter + ":" + verse);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BookData data = new BookData(book, versePassage);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String plainText = OSISUtil.getPlainText(data.getOsisFragment());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (plainText.matches(".*wash.*word.*"))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(plainText);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(BibleInfo.getBookName(bookIndex).getLongName());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; after = System.currentTimeMillis();<br><br><br>John 13:12So after he had washed their feet, and had taken his garments, and was set down again, he said unto them, Know ye what I have done to you?tag 17 - has no greek word tag 12 "and was set down"<br>Ephesians 5:26That he might sanctify and cleanse it with the washing of water by the word,<br>Revelation of John 7:14And I said unto him, Sir, thou knowest. And he said to me, These are they which came out of great tribulation, and have washed their robes, and made them white in the blood of the Lamb.NOTE! Extra word: "stolei"<br>search took: 13280ms<br><br>----- "trent jsword" &lt;<a href="mailto:trent.jsword@trentonadams.ca">trent.jsword@trentonadams.ca</a>&gt; wrote:<span class="Apple-converted-space">&nbsp;</span><br>&gt; From: "trent jsword" &lt;<a href="mailto:trent.jsword@trentonadams.ca">trent.jsword@trentonadams.ca</a>&gt;<br>&gt; To: "J-Sword Developers Mailing List" &lt;<a href="mailto:jsword-devel@crosswire.org">jsword-devel@crosswire.org</a>&gt;<br>&gt; Sent: Thursday, February 25, 2010 6:10:41 PM GMT -06:00 US/Canada Central<br>&gt; Subject: Re: [jsword-devel] regex searching<br>&gt;<br>&gt;<div style="font-family: Courier; font-size: 12pt; color: rgb(0, 0, 0); ">&gt; Well, I don't know how fast loading verses is in jsword, but my app takes .18 seconds, or possibly a little more depending on what you search for, for searching the entire bible.&nbsp; The bible text is on one verse per line, so there's no need to load one verse at a time.&nbsp; An example of a slow search, which is rare, would be "the.*or", which takes 18.32 seconds because it loads almost the entire bible over the internet, being that LARGE portions of scripture are found, lol)<br>&gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; Try "blood.*sacrifice" on<span class="Apple-converted-space">&nbsp;</span><a href="http://www.trentonadams.ca/biblesearch">http://www.trentonadams.ca/biblesearch</a><span class="Apple-converted-space">&nbsp;</span>for an example of a relatively fast search.<br>&gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; I can't imagine it being a "huge" amount slower with jsword, unless the file types that the data is stored in are particularly slow loading verses.&nbsp; But, jsword seems snappy enough, so I doubt it would be a problem.<br>&gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; But, if regex was implemented, you could allow the person to specify "within X verses of each other".&nbsp; i.e. "wash" would be in v3 and "word" would be in v4&nbsp; But it would probably require strange verse concatenations for one attempt, no concatenations for another attempt, shifting one verse at a time through the whole bible, etc, unless you wrote a regular expression parser of your own, that could find certain parts in one verse, and other parts in another.&nbsp; But that gets really complicated.&nbsp; So, on first thought, finding regular expressions between verses would be VERY time consuming.&nbsp; But that's just off the top of my head, so who knows, you might be able to do something fast. ;)<br>&gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; ----- "Sijo Cherian" &lt;<a href="mailto:sijo.cherian@gmail.com">sijo.cherian@gmail.com</a>&gt; wrote:<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; From: "Sijo Cherian" &lt;<a href="mailto:sijo.cherian@gmail.com">sijo.cherian@gmail.com</a>&gt;<br>&gt; &gt; To: "J-Sword Developers Mailing List" &lt;<a href="mailto:jsword-devel@crosswire.org">jsword-devel@crosswire.org</a>&gt;<br>&gt; &gt; Sent: Thursday, February 25, 2010 5:46:17 PM GMT -06:00 US/Canada Central<br>&gt; &gt; Subject: Re: [jsword-devel] regex searching<br>&gt; &gt;<br>&gt; &gt; What about finding terms across verse boudaries? As far as I remember the index documents are on per verse basis. So there is no way lucene query can find nearby words in a paragraph (across verse boundaries). Regex can help if we string-together verses or use Passage, but like DM mentioned, it will be slow to run regex (regex can be compiled once, but it has to run on so many verse strings).<div><br>&gt; &gt;</div><div>BTW&nbsp;Is anyone working on getting search result highlighting? What needs to done besides using lucene-highlighter during the search?</div><div><br>&gt; &gt;</div><div>-Sijo</div><div><br>&gt; &gt;<div class="gmail_quote">&gt; &gt; On Wed, Feb 24, 2010 at 11:05 PM, DM Smith<span class="Apple-converted-space">&nbsp;</span><span dir="ltr">&lt;<a href="mailto:dmsmith@crosswire.org" target="_blank">dmsmith@crosswire.org</a>&gt;</span><span class="Apple-converted-space">&nbsp;</span>wrote:<br>&gt; &gt;<blockquote class="gmail_quote" style="border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0.8ex; padding-left: 1ex; ">JSword search indexes support the full search syntax of Lucene. This has some support for regular expressions. Specifically, it allows for * to mean zero or more characters. I think we've got the Lucene flag to allow prefix wild cards. Note that this is more like what a shell uses: it is not a modifier for the previous character.<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; It was correctly noted that wash.*word will not search the verse as a whole. Lucene search is based on words. The correct pattern in Lucene would be wash*word, as '.' does not mean any character but rather it means a punctuation mark. So "wash.*word" would be split into "wash *word" and would find all verses with the word "wash" and any word ending with "word", such as "sword".<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; The default connector for JSword is OR. It would be good to add the ability for a user to change it to AND. With that, "wash* word" would produce the expected results as it would be interpreted as "wash* AND word" instead of "wash* OR word". (Choice would be some thing like "Search for ALL words instead of ANY words.") We made OR the default because it more closely matched various familiar search engines, such as Google, and because it is the default of Lucene.<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; Lucene does have a regular expression capability, but it is not part of JSword. It would be a good addition. Still, it would be based on words and not on the text of a verse.<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; Adding the ability to search an arbitrary regular expression would be a good addition. I don't think it would be too hard to add it. Jsword already has the interface for any search implementation. Java's Regex is a variant of Perl's but has a bit more power. &nbsp;There are some issues: We'll be adding highlighting to Lucene's search. Adding that to Regex would be a separate effort. The regex search would be mutually exclusive from Lucene search, so that would need to be made obvious. (In The SWORD Project for Windows, they have both it is a bit confusing as it is not clear.)<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; And yes, it will need to go throw the "plain" text of each verse. It will be about as slow as creating an index. Basically, it will need to take the raw verse and strip the markup. (This is part of JSword already and Lucene indexing uses it.) And perhaps strip out the punctuation. Finally doing the search.<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; If you want, add an issue or two to Jira (<a href="http://www.crosswire.org/bugs" target="_blank">www.crosswire.org/bugs</a>) under JSword. That way it won't be forgotten.<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; In Christ,<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><font color="#888888">&nbsp; &nbsp;DM</font><div><div></div><div class="h5">&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; On 02/23/2010 08:33 PM, Trenton D. Adams wrote:<br>&gt; &gt;<blockquote class="gmail_quote" style="border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0.8ex; padding-left: 1ex; ">But then again, I wonder if it's even needed, who knows.<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; ----- "Trenton D. Adams"&lt;<a href="mailto:trent.jsword@trentonadams.ca" target="_blank">trent.jsword@trentonadams.ca</a>&gt; &nbsp;wrote:<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; &nbsp;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt;<blockquote class="gmail_quote" style="border-left-width: 1px; border-left-style: solid; border-left-color: rgb(204, 204, 204); margin-top: 0pt; margin-right: 0pt; margin-bottom: 0pt; margin-left: 0.8ex; padding-left: 1ex; ">From: "Trenton D. Adams"&lt;<a href="mailto:trent.jsword@trentonadams.ca" target="_blank">trent.jsword@trentonadams.ca</a>&gt;<br>&gt; &gt; To: "J-Sword Developers Mailing"&lt;<a href="mailto:jsword-devel@crosswire.org" target="_blank">jsword-devel@crosswire.org</a>&gt;<br>&gt; &gt; Sent: Tuesday, February 23, 2010 7:29:08 PM GMT -06:00 US/Canada Central<br>&gt; &gt; Subject: [jsword-devel] regex searching<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; Hello,<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; I'm getting the impression that regular expression searching is not at<br>&gt; &gt; all possible without implementing something that loads the books<br>&gt; &gt; itself, and goes through each verse of the bible. &nbsp;Is this true?<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; It seems like the Lucene Index just doesn't support regular expression<br>&gt; &gt; searches, eh? &nbsp;And it also seems like SearcherFactory is currently not<br>&gt; &gt; finished being implemented as a SearcherFactory, correct? &nbsp;Or, perhaps<br>&gt; &gt; other methods need to be added, like createSearcher(Book, Class<br>&gt; &gt; searcherClass)??? &nbsp;Then you could provide another searcher type.<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; What would be appropriate for this? adding the new<br>&gt; &gt; SearcherFactory.createSearcher(), adding another "find" method to<br>&gt; &gt; AbstractBook/Book that is something like "find(SearchRequest,<br>&gt; &gt; Searcher)"???<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; Are the books and everything abstract enough that I can search them by<br>&gt; &gt; loading the text? &nbsp;Or would I have to restrict it to the book types I<br>&gt; &gt; know how to parse?<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; Anything else?<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; Thanks.<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; _______________________________________________<br>&gt; &gt; jsword-devel mailing list<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><a href="mailto:jsword-devel@crosswire.org" target="_blank">jsword-devel@crosswire.org</a><br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><a href="http://www.crosswire.org/mailman/listinfo/jsword-devel" target="_blank">http://www.crosswire.org/mailman/listinfo/jsword-devel</a><br>&gt; &gt; &nbsp; &nbsp;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt;</blockquote>_______________________________________________<br>&gt; &gt; jsword-devel mailing list<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><a href="mailto:jsword-devel@crosswire.org" target="_blank">jsword-devel@crosswire.org</a><br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><a href="http://www.crosswire.org/mailman/listinfo/jsword-devel" target="_blank">http://www.crosswire.org/mailman/listinfo/jsword-devel</a><br>&gt; &gt; &nbsp;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt;</blockquote><br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; _______________________________________________<br>&gt; &gt; jsword-devel mailing list<br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><a href="mailto:jsword-devel@crosswire.org" target="_blank">jsword-devel@crosswire.org</a><br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><a href="http://www.crosswire.org/mailman/listinfo/jsword-devel" target="_blank">http://www.crosswire.org/mailman/listinfo/jsword-devel</a><br>&gt; &gt;</div></div></blockquote></div><br>&gt; &gt;<span class="Apple-converted-space">&nbsp;</span><br clear="all"><br>&gt; &gt; --<span class="Apple-converted-space">&nbsp;</span><br>&gt; &gt; Regards,<br>&gt; &gt; Sijo<br>&gt; &gt;</div><br>&gt; &gt; _______________________________________________ jsword-devel mailing list<span class="Apple-converted-space">&nbsp;</span><a href="mailto:jsword-devel@crosswire.org">jsword-devel@crosswire.org</a><span class="Apple-converted-space">&nbsp;</span><a href="http://www.crosswire.org/mailman/listinfo/jsword-devel">http://www.crosswire.org/mailman/listinfo/jsword-devel</a></div><br>&gt; _______________________________________________ jsword-devel mailing list<span class="Apple-converted-space">&nbsp;</span><a href="mailto:jsword-devel@crosswire.org">jsword-devel@crosswire.org</a><a href="http://www.crosswire.org/mailman/listinfo/jsword-devel">http://www.crosswire.org/mailman/listinfo/jsword-devel</a></div>_______________________________________________<br>jsword-devel mailing list<br><a href="mailto:jsword-devel@crosswire.org">jsword-devel@crosswire.org</a><br><a href="http://www.crosswire.org/mailman/listinfo/jsword-devel">http://www.crosswire.org/mailman/listinfo/jsword-devel</a><br></div></blockquote></div><br></body></html>