<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/&quot;D0UBQHk8fSp7ImA9WxJWE0o.&quot;"><id>tag:blogger.com,1999:blog-3304792587797491241</id><updated>2009-06-18T18:34:11.775-07:00</updated><title>Search Engine - Lucene</title><subtitle type="html">Jakarta Lucene is is a high-performance, full-featured, java, open-source, text search engine API. This site provides lots of information of using Lucene for your applications. This provides example code for index creation, Performance tips, Asynchronous Index Writer, speed factors etc.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://search-lucene.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://search-lucene.blogspot.com/" /><author><name>Software Wikipedia</name><uri>http://www.blogger.com/profile/16978304261932493302</uri><email>software.wikipedia@gmail.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/SearchEngineLucene" type="application/atom+xml" /><entry gd:etag="W/&quot;CU8CQHc4eCp7ImA9WxJXE0Q.&quot;"><id>tag:blogger.com,1999:blog-3304792587797491241.post-4632216610419853823</id><published>2009-05-04T15:01:00.000-07:00</published><updated>2009-06-07T09:57:41.930-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-07T09:57:41.930-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Search Relevance" /><title>Why eBay will keep losing its business - product search sucks big time</title><content type="html">&lt;div style='display:none'&gt;&lt;br /&gt;eBay losing business, ebay search is bad, I hate ebay search, cashback ebay, ebay search sucks bigtime, ebay product search performance is low, ebay search is slow, ebay search is irrelevant, eaby search not returning correct results, ebay search invalid results,ebay search no business sense, lucene business search,ebay lost business, ebay at loss due to product search. ebay to improve product search.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 330px;" src="http://3.bp.blogspot.com/_hpoWLUUuwbc/Sf9pXpDH8DI/AAAAAAAAAaE/pwXC9enDuh4/s400/eBaySearchResult.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5332096338706821170" /&gt;&lt;br /&gt;&lt;br /&gt;I wanted to buy a Sony battery charger for rechargable AA batteries. I went to a few of online purchase websites and did search for keyword &lt;span style="color: rgb(255, 0, 0);"&gt;"Sony battery charger"&lt;/span&gt;. At buy.com the results were shown for the kind of chargers I was looking for and it did show one charger, which I really liked (Sony Power Battery Charger - with 4 AA Ni-MH Rechargeable Batteries).&lt;br /&gt;&lt;br /&gt;I did the same search on eBay and it found 14,500+ products but everything on first page was of no relevance to me. In results, the first product is sony camera batter charger (New Battery &amp;amp; Charger For Sony Camera NP-BG1 NPBG1). What the hell!! God knows where did that come from? eBay is into online shopping business and they can't afford to have such rubbish search results.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I am not here to promote eBay business but I know eBay has got so many deals for every product and some people who know how to search it on eBay really enjoy shopping there. I guess eBay is using Lucene or similar search engine for product search. I am sure that eBay is losing its business due to the poor search relevance. I am a search engine programmer and had tough time doing query for what I am looking for. How does eBay expect non-geeks to search stuff on their site?&lt;br /&gt;&lt;br /&gt;I find Craiglist search returning more relevant results then eBay does. No doubt that people would stop going to a website where they can't find things they are looking for.&lt;br /&gt;&lt;br /&gt;May be getting a relevant result from millions of product data can be difficult, but thats why search engines are invented isn't it? The economy is tough and still eBay is thriving. First quarter results of comapny were good and now may be if John Donahoe want's to be a successful CEO he would try to address this simple problem (of searching products) before getting into more complex issues.&lt;br /&gt;&lt;br /&gt;By the way when I used Google site search for ebay it didn't give satisfactory results either. try "site:ebay.com Sony battery charger" on google.&lt;br /&gt;&lt;br /&gt;I tried a few other products search on eBay and compared with other online shopping portals and the results were no different. Where as Google's shopping results show absolutely relevant results as if they were reading my mind.&lt;br /&gt;&lt;br /&gt;Did you know you can also get cashback discounts on your eBay purchases if you go through Microsoft's live.com &lt;a href="http://justaboutanything-expert.blogspot.com/2009/05/getting-cash-back-discount-on-ebay.html"&gt;Read More&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3304792587797491241-4632216610419853823?l=search-lucene.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VAOeTfGxQBmJTgGbx2Y1YA0NvRI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VAOeTfGxQBmJTgGbx2Y1YA0NvRI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VAOeTfGxQBmJTgGbx2Y1YA0NvRI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VAOeTfGxQBmJTgGbx2Y1YA0NvRI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=UX2TjDWfRpM:4uMboBR9cJc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=UX2TjDWfRpM:4uMboBR9cJc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?i=UX2TjDWfRpM:4uMboBR9cJc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/SearchEngineLucene?a=UX2TjDWfRpM:4uMboBR9cJc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/SearchEngineLucene?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://search-lucene.blogspot.com/feeds/4632216610419853823/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://search-lucene.blogspot.com/2009/05/why-ebay-will-keep-losing-its-business.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3304792587797491241/posts/default/4632216610419853823?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3304792587797491241/posts/default/4632216610419853823?v=2" /><link rel="alternate" type="text/html" href="http://search-lucene.blogspot.com/2009/05/why-ebay-will-keep-losing-its-business.html" title="Why eBay will keep losing its business - product search sucks big time" /><author><name>Software Wikipedia</name><uri>http://www.blogger.com/profile/16978304261932493302</uri><email>software.wikipedia@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="05041989334443245877" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_hpoWLUUuwbc/Sf9pXpDH8DI/AAAAAAAAAaE/pwXC9enDuh4/s72-c/eBaySearchResult.JPG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total></entry><entry gd:etag="W/&quot;CUMFQX46fSp7ImA9WxJXE0Q.&quot;"><id>tag:blogger.com,1999:blog-3304792587797491241.post-7901388846737261294</id><published>2009-02-23T16:23:00.001-08:00</published><updated>2009-06-07T09:50:10.015-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-07T09:50:10.015-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Best Practices" /><category scheme="http://www.blogger.com/atom/ns#" term="Lucene Best Practices" /><category scheme="http://www.blogger.com/atom/ns#" term="Compass" /><title>Search Engine Best Practices: Compass as a Lucene Abstraction</title><content type="html">&lt;div style='display:none'&gt;&lt;br /&gt;Compass lucene, compass as abstraction to lucene, lucene library, compass open source, Search engine best practices, compass lucenesearchengine, &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:sans-serif;font-size:85%;"&gt;If you are considering Lucene as a Search Engine library for your application then you would certainly want to have a look at Compass. Compass is a open source project, which should be considered before starting from scratch development using Lucene. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:sans-serif;font-size:85%;"&gt;I have seen many people not feeling comfortable dealing with Lucene APIs, Compass provides a simple API for using Lucene. Here are the features I gathered from its latest documenation on [&lt;/span&gt;&lt;a href="http://www.compass-project.org/" target="_blank"&gt;&lt;span style="color:blue;"&gt;&lt;u&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://www.compass-project.org/&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:sans-serif;font-size:85%;"&gt;] &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:sans-serif;font-size:85%;"&gt;It provides operations for save, and delete &amp;amp; query without knowing details of index handling. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:sans-serif;font-size:85%;"&gt;Compass simplifies common usage patterns of Lucene such as google style search, index updates. It also has support for caching and index sharding (sub indexes). &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:sans-serif;font-size:85%;"&gt;In fact it has built in optimizations for concurrent commits and merges,  which can be complex implementation if you are trying to do it on your own.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:sans-serif;font-size:85%;"&gt;It provides a transactional API on top of the Search Engine supporting different transaction isolation levels. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:sans-serif;font-size:85%;"&gt;It also provides a local transaction manager as well as integration with external transaction managers such as JTA (Sync and XA), Spring, and ORM ones.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:sans-serif;font-size:85%;"&gt;It integrates seamlessly with most popular ORM frameworks allowing automatic mirroring, to the index, of the changes in data performed via the ORM tool. Compass has generic support for JPA as well as embedded support for Hibernate, OpenJPA, TopLink Essentials, and EclipseLink allow to add Compass using three simple steps.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:sans-serif;font-size:85%;"&gt;It also integrates with Spring. Compass can be easily configured using Spring, integrates with Spring transaction management, has support for Spring MVC, and has Spring aspects built in for reflecting operations to the search engine.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:sans-serif;font-size:85%;"&gt;It also simplifies the creation of distributed Lucene index by allowing to store the Lucene index in a database, as well as storing the index simply with Data Grid products such as GigaSpaces, Coherence and Terracotta.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:sans-serif;font-size:85%;"&gt;For more details of Compass, have a look at the Compass web page here [&lt;/span&gt;&lt;a href="http://www.compass-project.org/" target="_blank"&gt;&lt;span style="color:blue;"&gt;&lt;u&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://www.compass-project.org/&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:sans-serif;font-size:85%;"&gt;], If you are a Compass user/developer and facing some problem then you can post your problems in Compass forums at [&lt;/span&gt;&lt;a href="http://forum.compass-project.org/index.jspa" target="_blank" &gt;&lt;span style="color:blue;"&gt;&lt;u&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://forum.compass-project.org/index.jspa&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:100%;"&gt;]. &lt;/span&gt;&lt;span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;The community is really enthusiastic and you would get responses very quickly.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:sans-serif;font-size:85%;"&gt;If you have some idea about best practices in search engine arena please share with us, and post a comment. We would be glad to discuss on it.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3304792587797491241-7901388846737261294?l=search-lucene.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/X2HhGXGQJdQB2zna1EDUFEc7Kyk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X2HhGXGQJdQB2zna1EDUFEc7Kyk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/X2HhGXGQJdQB2zna1EDUFEc7Kyk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/X2HhGXGQJdQB2zna1EDUFEc7Kyk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=v7PMHPkg"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=eZkPbLNm"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?i=eZkPbLNm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=5WDw9Pkh"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://search-lucene.blogspot.com/feeds/7901388846737261294/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://search-lucene.blogspot.com/2009/02/search-engine-best-practices-compass-as.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3304792587797491241/posts/default/7901388846737261294?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3304792587797491241/posts/default/7901388846737261294?v=2" /><link rel="alternate" type="text/html" href="http://search-lucene.blogspot.com/2009/02/search-engine-best-practices-compass-as.html" title="Search Engine Best Practices: Compass as a Lucene Abstraction" /><author><name>Software Wikipedia</name><uri>http://www.blogger.com/profile/16978304261932493302</uri><email>software.wikipedia@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="05041989334443245877" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></entry><entry gd:etag="W/&quot;DkcFRH86fip7ImA9WxJXE0Q.&quot;"><id>tag:blogger.com,1999:blog-3304792587797491241.post-3852436344925083289</id><published>2008-10-10T23:42:00.001-07:00</published><updated>2009-06-07T10:00:15.116-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-07T10:00:15.116-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Maintenance" /><title>Lucene Index Maintenance (Insert, Update and Delete)</title><content type="html">&lt;div style='display:none;'&gt;&lt;br /&gt;lucene index maintenance, lucene index insert, lucene index update not working, lucene index delete fails, lucene index fast insert, lucene index fast update, lucene index maintenance issues, lucene index maintenance problems.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div dir="ltr"&gt;Lucene is a powerfull search engine with great indexing API which can be used to build search feature for your web application. &lt;br&gt;In this post I am trying to address the maintenance aspects of a Lucene index. &lt;br&gt; Once the initial index is created here are the steps which you may need to perform&lt;br&gt;&lt;br&gt;&lt;b&gt;1. Inserting new documents&lt;br&gt;2. Updating existing documents &lt;br&gt;3. Deleting existing documents &lt;br&gt;&lt;/b&gt;&lt;br&gt;&lt;b&gt;Inserting new documents:&lt;/b&gt;&lt;br&gt; Lucene doesnt check for duplicate documents, so you need to build your own logic to identify whether a document is new document or a existing one.&lt;br&gt;Once identied, inserting is not different than creating the index we just need to take care of recreate flag,&lt;br&gt; which needs to be false so that the index directory is not overwritten (recreated). Adding the document can be done using IndexWriter.addDocument() call for each document you want to add.&lt;br&gt;&lt;br&gt;&lt;b&gt;Updating existing documents:&lt;br&gt; &lt;/b&gt;As I have already mentioned that Lucene is not going to check for duplicates, so in case of updating &lt;br&gt;if its an existing document then it can be done in two steps, &lt;br&gt;first delete the document and then add the new document to index.&lt;br&gt; &lt;br&gt;&lt;br&gt;&lt;b&gt;Deleting existing documents:&lt;br&gt;&lt;/b&gt;Deleting can be easily done by IndexReader.deleteDocuments(Terms) and IndexWriter.deleteDocuments(Terms)&lt;br&gt;&lt;br&gt;&lt;b&gt;Problem deleting documents:&lt;br&gt;&lt;/b&gt;&lt;br&gt;What I have observed is that if the document field is UN_TOKENIZED then these methods work well. But if the Document field is TOKENIZED then delete fails.&lt;br&gt; &lt;br&gt;One good way to do this is to keep same field with a different name and with UN_TOKENIZED type index field, and while deleting use the same field Term to delete the document.&lt;br&gt;&lt;br&gt;Deleting the index documents by number is simple and easy. It works well if you know the document number.&lt;br&gt; &lt;br&gt;You need to reopen all the searchers which were already open.&lt;br&gt;&lt;br&gt;&lt;/div&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/comment.g?blogID=3304792587797491241&amp;postID=3852436344925083289"&gt;Post a Message&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3304792587797491241-3852436344925083289?l=search-lucene.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Yo9QZh8Rz2GQOfosi3ZmtR4afHQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Yo9QZh8Rz2GQOfosi3ZmtR4afHQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Yo9QZh8Rz2GQOfosi3ZmtR4afHQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Yo9QZh8Rz2GQOfosi3ZmtR4afHQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=cs4k7dUv"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=ii69dWar"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?i=ii69dWar" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=gzSkO3rE"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://search-lucene.blogspot.com/feeds/3852436344925083289/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://search-lucene.blogspot.com/2008/10/lucene-index-maintenance-insert-update.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3304792587797491241/posts/default/3852436344925083289?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3304792587797491241/posts/default/3852436344925083289?v=2" /><link rel="alternate" type="text/html" href="http://search-lucene.blogspot.com/2008/10/lucene-index-maintenance-insert-update.html" title="Lucene Index Maintenance (Insert, Update and Delete)" /><author><name>Software Wikipedia</name><uri>http://www.blogger.com/profile/16978304261932493302</uri><email>software.wikipedia@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="05041989334443245877" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total></entry><entry gd:etag="W/&quot;CEcFRXY_eyp7ImA9WxJXFEU.&quot;"><id>tag:blogger.com,1999:blog-3304792587797491241.post-2886428116787466037</id><published>2008-08-28T13:40:00.000-07:00</published><updated>2009-06-08T10:26:54.843-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-08T10:26:54.843-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Asynchronous Writer" /><category scheme="http://www.blogger.com/atom/ns#" term="Speed Factors" /><title>Lucene: Asynchronous Index Writer for faster writing</title><content type="html">&lt;div style="display: none;"&gt;&lt;br /&gt;lucene indexwriter, lucene indexing , lucene fast index writer, lucene fast indexing, lucene asynchronous writer, lucene building fast index, lucene parallel index, search engine lucene, indexwriter lucene, what is lucene search, implementing search lucene, lucene indexing speed, lucene indexing performance improvement.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;I was trying to do  some Index writing speed improvement and thought of creating a  asynchronous Lucene index writer. This writer provides a addDocument()  method which can be called asynchronously by multiple threads.  &lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;Here are the few  scenario where you can utilize this implementation&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;- Reading the data  is slower then writing to the index. (Typical scenario where you read over  network, or from database.)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;- Reading can be  divided in multiple logical parts which can be processed in separate  threads.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;- You are looking  for asynchronous behavior to decouple reading and writing  processes.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;This implementation  is a wrapper which utilizes core methods of IndexWriter class, and does not  do any change to it except making it asynchronous. It utilizes Java's    &lt;span style="font-size:100%;"&gt;java.util.concurrent.BlockingQueue&lt;/span&gt; for storing the  documents. It can be supplied with any implementation of this class using its  constructor.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;Below is the Java  source of this implementation class&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;This class provides multiple  constructors to have better control. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;span class="703490020-28082008"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;span class="703490020-28082008"&gt;Few terms which are used here are as follows  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;span class="703490020-28082008"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;span class="703490020-28082008"&gt;Sleep Milliseconds On Empty: This is the sleep duration  when writer finds nothing in queue and wants to wait for some data to come in  queue. ()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;span class="703490020-28082008"&gt;Queue Size: This is the size of the queue which can be  configured as a constructor parameter input.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;span class="703490020-28082008"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;span class="703490020-28082008"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt; &lt;/span&gt;&lt;/b&gt;&lt;p align="left"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;package&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; swiki.lucene.asynchronous;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt; &lt;/span&gt;&lt;/b&gt;&lt;p align="left"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;import&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  java.io.IOException;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt; &lt;/span&gt;&lt;/b&gt;&lt;p align="left"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;import&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  java.util.concurrent.ArrayBlockingQueue;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt; &lt;/span&gt;&lt;/b&gt;&lt;p align="left"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;import&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  java.util.concurrent.BlockingQueue;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt; &lt;/span&gt;&lt;/b&gt;&lt;p align="left"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;import&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  org.apache.lucene.document.Document;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt; &lt;/span&gt;&lt;/b&gt;&lt;p align="left"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;import&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  org.apache.lucene.index.CorruptIndexException;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt; &lt;/span&gt;&lt;/b&gt;&lt;p align="left"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;import&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  org.apache.lucene.index.IndexWriter;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt; &lt;p align="left"&gt;/**&lt;/p&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;@author&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;swiki&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;swiki&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*/&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt; &lt;/span&gt;&lt;/b&gt;&lt;p align="left"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;class&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; AsynchronousIndexWriter &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;implements&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; Runnable {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;/*&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;* A blocking queue of document to facilitate asynchronous  writing.&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;*/&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;private&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; BlockingQueue &lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;documents&lt;/span&gt;&lt;span style="font-size:100%;"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;/*&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;* Instance of core index writer which does the actual writing  task.&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;*/&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;private&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; IndexWriter &lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;writer&lt;/span&gt;&lt;span style="font-size:100%;"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;/*&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;* Thread which makes writing asynchronous&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;*/&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;private&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; Thread &lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;writerThread&lt;/span&gt;&lt;span style="font-size:100%;"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;/*&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;* We need to set this to false if the document addition is  completed. This&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;* will not immediately stop the writing as there could be some  documents in&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;* the queue. It completes once all documents are written and the  queue is&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;* empty.&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;*/&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;private&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;boolean&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;keepRunning&lt;/span&gt;&lt;span style="font-size:100%;"&gt; =  &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;true&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;/*&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;* This flag is set to false once writer is done with the queue  data&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;* writing.&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;*/&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;private&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;boolean&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;isRunning&lt;/span&gt;&lt;span style="font-size:100%;"&gt; =  &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;true&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;/*&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;* Duration in miliseconds for which the writer should sleep when  it finds&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;* the queue empty and job is still not completed&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;*/&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;private&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;long&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;sleepMilisecondOnEmpty&lt;/span&gt;&lt;span style="font-size:100%;"&gt; =  100;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;/**&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;This&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;method&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;should&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;be&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;used&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;to&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;add&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;documents&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;to&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;index&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;queue.&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;If&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;the&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;queue&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;is&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;full&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;it&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;will&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;wait&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;for&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;the&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;queue&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;to&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;be&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;available.&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;@param&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;doc&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;@throws&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;InterruptedException&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*/&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  addDocument(Document doc) &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;throws&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; InterruptedException {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;documents&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.put(doc);&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  startWriting() {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;writerThread&lt;/span&gt;&lt;span style="font-size:100%;"&gt; = &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;new&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;    Thread(&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;this&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;,    &lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);font-size:100%;" &gt;"AsynchronousIndexWriter"&lt;/span&gt;&lt;span style="font-size:100%;"&gt;);&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;writerThread&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.start();&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;/**&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;Constructor&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;with&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;indexwriter&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;as&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;input.&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;It&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;Uses&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;ArrayBlockingQueue&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;with&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;size&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;100&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;and&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;sleepMilisecondOnEmpty&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;is&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;100ms&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;@param&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;w&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*/&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; AsynchronousIndexWriter(IndexWriter w) {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;this&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(w, 100, 100);&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;/**&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;Constructor&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;with&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;indexwriter&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;and&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;queue&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;size&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;as&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;input.&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;It&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;Uses&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;ArrayBlockingQueue&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;with&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;size&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;queueSize&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;and&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;sleepMilisecondOnEmpty&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;is&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;100ms&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;@param&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;w&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;@param&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;queueSize&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*/&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; AsynchronousIndexWriter(IndexWriter w, &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;int&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; queueSize) {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;this&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(w, queueSize, 100);&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;/**&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;Constructor&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;with&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;indexwriter,&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;queueSize&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;as&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;input.&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;It&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;Uses&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;ArrayBlockingQueue&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;with&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;size&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;queueSize&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;@param&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;w&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;@param&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;queueSize&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;@param&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;sleepMilisecondOnEmpty&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*/&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; AsynchronousIndexWriter(IndexWriter w, &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;int&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; queueSize,&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;long&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; sleepMilisecondOnEmpty) {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;this&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(w, &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;new&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;    ArrayBlockingQueue(queueSize), sleepMilisecondOnEmpty);&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;/**&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;A&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;implementation&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;of&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;BlockingQueue&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;can&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;be&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;used&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;@param&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;w&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;@param&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;queueSize&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;@param&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 159, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;sleepMilisecondOnEmpty&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*/&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; AsynchronousIndexWriter(IndexWriter w, BlockingQueue queue,&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;long&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; sleepMilisecondOnEmpty) {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;writer&lt;/span&gt;&lt;span style="font-size:100%;"&gt; =    w;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;documents&lt;/span&gt;&lt;span style="font-size:100%;"&gt;    = queue;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;this&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;sleepMilisecondOnEmpty&lt;/span&gt;&lt;span style="font-size:100%;"&gt; = sleepMilisecondOnEmpty;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;startWriting();&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;/*&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;* (non-Javadoc)&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;* &lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;* @see java.lang.Runnable#run()&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;*/&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; run()  {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;while&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; (&lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;keepRunning&lt;/span&gt;&lt;span style="font-size:100%;"&gt; ||    !&lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;documents&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.isEmpty())    {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;Document d = (Document) &lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;documents&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.poll();&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;try&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;    {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;&lt;span style="font-size:100%;"&gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;if&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; (d != &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;null&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;) {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;writer&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.addDocument(d);&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;} &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;else&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;/*&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;* Nothing in queue so lets wait&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;*/&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;Thread.&lt;i&gt;sleep&lt;/i&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;sleepMilisecondOnEmpty&lt;/span&gt;&lt;span style="font-size:100%;"&gt;);&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;} &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;catch&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; (ClassCastException e) {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;e.printStackTrace();&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;throw&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;new&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;      RuntimeException(e);&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;} &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;catch&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; (InterruptedException e) {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;e.printStackTrace();&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;throw&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;new&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;      RuntimeException(e);&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;} &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;catch&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; (CorruptIndexException e) {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;e.printStackTrace();&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;throw&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;new&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;      RuntimeException(e);&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;} &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;catch&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; (IOException e) {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;e.printStackTrace();&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;throw&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;new&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;      RuntimeException(e);&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;     &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;isRunning&lt;/span&gt;&lt;span style="font-size:100%;"&gt; =  &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;false&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;/**&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;Stop&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;the&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;thread&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;gracefully,&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;wait&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;until&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;its&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;done&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;writing.&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;*/&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;private&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  stopWriting() {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;this&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.&lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;keepRunning&lt;/span&gt;&lt;span style="font-size:100%;"&gt; =    &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;false&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;try&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;    {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;while&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; (&lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;isRunning&lt;/span&gt;&lt;span style="font-size:100%;"&gt;)  {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;//using the same sleep    duration as writer uses&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;Thread.&lt;i&gt;sleep&lt;/i&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;sleepMilisecondOnEmpty&lt;/span&gt;&lt;span style="font-size:100%;"&gt;);&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;} &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;catch&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; (InterruptedException e) {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;e.printStackTrace();&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  optimize() &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;throws&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  CorruptIndexException, IOException {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;writer&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.optimize();&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;public&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  close() &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;throws&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);font-size:100%;" &gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;  CorruptIndexException, IOException {&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;blockquote dir="ltr" style="margin-right: 0px;"&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;stopWriting();&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;   &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 192);font-size:100%;" &gt;writer&lt;/span&gt;&lt;span style="font-size:100%;"&gt;.close();&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;  &lt;/span&gt;&lt;/div&gt; &lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;br /&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;Below is a sample  class which demonstrates how we can use this class. Here are few things to note,  asynchronous thread is started as soon as you instantiate using  &lt;strong&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:100%;"&gt;  AsynchronousIndexWriter(...)  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;/span&gt;&lt;/span&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt; &lt;/span&gt;&lt;/b&gt;&lt;p align="left"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;package&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt; swiki.lucene.asynchronous;&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;/span&gt;&lt;/p&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt; &lt;/span&gt;&lt;/b&gt;&lt;p align="left"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;import&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt; org.apache.lucene.analysis.standard.StandardAnalyzer;&lt;/span&gt;&lt;/p&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt; &lt;/span&gt;&lt;/b&gt;&lt;p align="left"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;import&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt; org.apache.lucene.document.Document;&lt;/span&gt;&lt;/p&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt; &lt;/span&gt;&lt;/b&gt;&lt;p align="left"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;import&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt; org.apache.lucene.document.Field;&lt;/span&gt;&lt;/p&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt; &lt;/span&gt;&lt;/b&gt;&lt;p align="left"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;import&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt; org.apache.lucene.index.IndexWriter;&lt;/span&gt;&lt;/p&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt; &lt;/span&gt;&lt;/b&gt;&lt;p align="left"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;import&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt; org.apache.lucene.store.Directory;&lt;/span&gt;&lt;/p&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt; &lt;/span&gt;&lt;/b&gt;&lt;p align="left"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;import&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:100%;"&gt; org.&lt;u&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;apache&lt;/span&gt;&lt;/u&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;.lucene.store.FSDirectory;&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-family:Arial;font-size:100%;"  &gt; &lt;/span&gt;&lt;p align="left"&gt;&lt;span style="color: rgb(63, 95, 191);font-family:Arial;font-size:100%;"  &gt;/**&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);font-family:Arial;font-size:100%;"  &gt;&lt;/span&gt; &lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;*&lt;/span&gt;  &lt;b&gt;&lt;span style="color: rgb(127, 159, 191);"&gt;@author&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 159, 191);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:100%;"&gt; &lt;span style="color: rgb(63, 95, 191);"&gt;swiki&lt;/span&gt; &lt;span style="color: rgb(63, 95, 191);"&gt;swiki&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;p align="left"&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;*&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;&lt;/span&gt; &lt;p align="left"&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;*/&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 95, 191);"&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt; &lt;/span&gt;&lt;/b&gt;&lt;p align="left"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;public&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:100%;"&gt; &lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;class&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;  TestAsyncWriter {&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;public&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:100%;"&gt; &lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;static&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:100%;"&gt;  &lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;  main(String[] args) {&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;try&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt; {&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Arial;"&gt;Directory fsdir =  FSDirectory.&lt;i&gt;getDirectory&lt;/i&gt;(&lt;/span&gt;&lt;span style="color: rgb(42, 0, 255);font-family:Arial;" &gt;"index"&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Arial;"&gt;IndexWriter w = &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;span style="font-family:Arial;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:100%;"&gt; IndexWriter(fsdir, &lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;new&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:100%;"&gt;  StandardAnalyzer(), &lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;true&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;);&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Arial;"&gt;AsynchronousIndexWriter writer =  &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;span style="font-family:Arial;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt; AsynchronousIndexWriter(w); &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-family:Arial;font-size:100%;"  &gt;/*&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-family:Arial;font-size:100%;"  &gt;* This call can be  replace&lt;span class="703490020-28082008"&gt;d&lt;/span&gt; by the logic of reading  &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-family:Arial;font-size:100%;"  &gt;* data using multiple  threads &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);font-family:Arial;font-size:100%;"  &gt;*/&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;i&gt;addDocumentsInMultipleThreads&lt;/i&gt;(writer); &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;writer.optimize();&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;writer.close(); &lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Arial;"&gt;} &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;span style="font-family:Arial;"&gt;catch&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt; (Exception e) {&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;e.printStackTrace();&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;}&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;}&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;private&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:100%;"&gt; &lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;static&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:100%;"&gt;  &lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;void&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;  addDocumentsInMultipleThreads(&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Arial;"&gt;AsynchronousIndexWriter writer)  &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;span style="font-family:Arial;"&gt;throws&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;  InterruptedException {&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="color: rgb(63, 127, 95);"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;//add here the code  for adding document from multiple threads.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(63, 127, 95);"&gt;&lt;/span&gt; &lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Arial;"&gt;Document doc = &lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;span style="font-family:Arial;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt; Document();&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Arial;"&gt;doc.add(&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;span style="font-family:Arial;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:100%;"&gt; Field(&lt;span style="color: rgb(42, 0, 255);"&gt;"content"&lt;/span&gt;,&lt;span style="color: rgb(42, 0, 255);"&gt;"My Content"&lt;/span&gt;, Field.Store.&lt;i&gt;&lt;span style="color: rgb(0, 0, 192);"&gt;YES&lt;/span&gt;&lt;/i&gt;&lt;span style="color: rgb(0, 0, 192);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-size:100%;"&gt;,  Field.Index.&lt;i&gt;&lt;span style="color: rgb(0, 0, 192);"&gt;UN_TOKENIZED&lt;/span&gt;&lt;/i&gt;&lt;span style="color: rgb(0, 0, 192);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;));&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:Arial;"&gt;writer.addDocument(&lt;/span&gt;&lt;b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;span style="font-family:Arial;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: rgb(127, 0, 85);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt; Document());&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;}&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;}&lt;/span&gt;&lt;/p&gt; &lt;p align="left"&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt; &lt;div&gt;&lt;span class="703490020-28082008"&gt; &lt;/span&gt;&lt;/div&gt; &lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="703490020-28082008"&gt;&lt;span style=";font-family:Arial;font-size:100%;"  &gt;If you find this  useful or have some suggestions for improvements please leave a comment and I  will try to respond.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="display: none;"&gt;&lt;br /&gt;Lucene parallel writer code, lucene parallel indexing, lucene fast index creation, asynchronous index creation, parallel index creation, fast index creation code,&lt;br /&gt;Lucene Asynchronous Index Writer, thread based index writer, multi threaded index writing&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.keepandshare.com/doc/view.php?id=874919&amp;amp;da=y"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3304792587797491241-2886428116787466037?l=search-lucene.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WYbaiK79MrRmhxGu204cJo7chS8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WYbaiK79MrRmhxGu204cJo7chS8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WYbaiK79MrRmhxGu204cJo7chS8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WYbaiK79MrRmhxGu204cJo7chS8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=my1arfgo"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=mplgAtjs"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?i=mplgAtjs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=m1zwUorc"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://search-lucene.blogspot.com/feeds/2886428116787466037/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://search-lucene.blogspot.com/2008/08/lucene-asynchronous-index-writer-for.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3304792587797491241/posts/default/2886428116787466037?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3304792587797491241/posts/default/2886428116787466037?v=2" /><link rel="alternate" type="text/html" href="http://search-lucene.blogspot.com/2008/08/lucene-asynchronous-index-writer-for.html" title="Lucene: Asynchronous Index Writer for faster writing" /><author><name>Software Wikipedia</name><uri>http://www.blogger.com/profile/16978304261932493302</uri><email>software.wikipedia@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="05041989334443245877" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total></entry><entry gd:etag="W/&quot;D0ABSHs-fSp7ImA9WxdaF0U.&quot;"><id>tag:blogger.com,1999:blog-3304792587797491241.post-4834842669888249389</id><published>2008-08-26T13:45:00.000-07:00</published><updated>2008-08-26T14:22:39.555-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-26T14:22:39.555-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="FAQs" /><title>Can I use Lucene to index text in Chinese and other multi-byte character set languages?</title><content type="html">&lt;DIV&gt;&lt;STRONG&gt;Yes&lt;/STRONG&gt;,&amp;nbsp;Lucene is not limited to  English, or any other language. To index text, you need to use an  appropriate&amp;nbsp;Analyzer for the language of the text you are indexing.  Lucene's default Analyzers work well for English. There are&amp;nbsp; other Analyzers in &lt;A  href="http://jakarta.apache.org/lucene/docs/lucene-sandbox/"&gt;Lucene Sandbox&lt;/A&gt;, including  those for Chinese, Japanese and many other languages.  &lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3304792587797491241-4834842669888249389?l=search-lucene.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/sG32IN2NHf9ktdI7cAOHsSzK2DQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sG32IN2NHf9ktdI7cAOHsSzK2DQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/sG32IN2NHf9ktdI7cAOHsSzK2DQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/sG32IN2NHf9ktdI7cAOHsSzK2DQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=nlvZvR67"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=4iR9K7aL"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?i=4iR9K7aL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=9W0NX26S"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3304792587797491241/posts/default/4834842669888249389?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3304792587797491241/posts/default/4834842669888249389?v=2" /><link rel="alternate" type="text/html" href="http://search-lucene.blogspot.com/2008/08/can-i-use-lucene-to-index-text-in.html" title="Can I use Lucene to index text in Chinese and other multi-byte character set languages?" /><author><name>Software Wikipedia</name><uri>http://www.blogger.com/profile/16978304261932493302</uri><email>software.wikipedia@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="05041989334443245877" /></author></entry><entry gd:etag="W/&quot;C0cCQH85cCp7ImA9WxdaGEs.&quot;"><id>tag:blogger.com,1999:blog-3304792587797491241.post-4202737290872754474</id><published>2008-08-26T13:39:00.000-07:00</published><updated>2008-08-27T11:17:41.128-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-27T11:17:41.128-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="FAQs" /><title>How can I index Powerpoint documents?</title><content type="html">&lt;DIV&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;To create a Lucene based index of Powerpoint documents you need to first parse them to extract text that you want to index. You can use the Jakarta Apache &lt;/FONT&gt;&lt;/FONT&gt;&lt;A  href="http://jakarta.apache.org/poi"&gt;&lt;FONT face=Verdana  size=2&gt;POI&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Verdana size=2&gt;,&amp;nbsp;&lt;SPAN  class=921463620-26082008&gt;to parse the Powerpoint document and extract the  relevant text from it. &lt;br /&gt;&lt;br/&gt;&lt;br /&gt;You should also store the location of the Powerpoint document on file system in one of index fields this way when you find the document it can be directly shown as a link to the user. Storing all text in a content field is a good idea as you may want to show text representation of same document. Also this will help people to different wild card searches. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3304792587797491241-4202737290872754474?l=search-lucene.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WbWhxaKP5nwhb6fJL72hqJDMsW0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WbWhxaKP5nwhb6fJL72hqJDMsW0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WbWhxaKP5nwhb6fJL72hqJDMsW0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WbWhxaKP5nwhb6fJL72hqJDMsW0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=ITRdChWX"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=eOuBX6ky"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?i=eOuBX6ky" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=bBVn4ZPO"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3304792587797491241/posts/default/4202737290872754474?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3304792587797491241/posts/default/4202737290872754474?v=2" /><link rel="alternate" type="text/html" href="http://search-lucene.blogspot.com/2008/08/how-can-i-index-powerpoint-documents.html" title="How can I index Powerpoint documents?" /><author><name>Software Wikipedia</name><uri>http://www.blogger.com/profile/16978304261932493302</uri><email>software.wikipedia@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="05041989334443245877" /></author></entry><entry gd:etag="W/&quot;CkINQ349fyp7ImA9WxdbF0g.&quot;"><id>tag:blogger.com,1999:blog-3304792587797491241.post-3614525505253377874</id><published>2008-08-14T14:49:00.001-07:00</published><updated>2008-08-14T14:49:52.067-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-14T14:49:52.067-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Speed Factors" /><title>Indexing Speed Factors</title><content type="html">If you are using Lucene in a non-trivial application, you will want to ensure optimal indexing performance. The bottleneck of a typical text-indexing application is the process of writing index files onto a disk. Therefore, we need to instruct Lucene to be smart about adding and merging segments while indexing documents.&lt;br /&gt;&lt;br /&gt;When new documents are added to a Lucene index, they are initially stored in memory instead of being immediately written to the disk. This is done for performance reasons. The simplest way to improve Lucene's indexing performance is to adjust the value of IndexWriter's mergeFactor instance variable. This value tells Lucene how many documents to store in memory before writing them to the disk, as well as how often to merge multiple segments together. With the default value of 10, Lucene will store 10 documents in memory before writing them to a single segment on the disk. The mergeFactor value of 10 also means that once the number of segments on the disk has reached the power of 10, Lucene will merge these segments into a single segment. (There is a small exception to this rule, which I shall explain shortly.)&lt;br /&gt;&lt;br /&gt;For instance, if we set mergeFactor to 10, a new segment will be created on the disk for every 10 documents added to the index. When the 10th segment of size 10 is added, all 10 will be merged into a single segment of size 100. When 10 such segments of size 100 have been added, they will be merged into a single segment containing 1000 documents, and so on. Therefore, at any time, there will be no more than 9 segments in each power of 10 index size.&lt;br /&gt;&lt;br /&gt;The exception noted earlier has to do with another IndexWriter instance variable: maxMergeDocs. While merging segments, Lucene will ensure that no segment with more than maxMergeDocs is created. For instance, if we set maxMergeDocs to 1000, when we add the 10,000th document, instead of merging multiple segments into a single segment of size 10,000, Lucene will create a 10th segment of size 1000, and keep adding segments of size 1000 for every 1000 documents added.&lt;br /&gt;&lt;br /&gt;The default value of maxMergeDocs is Integer.MAX_VALUE. In my experience, one rarely needs to change this value.&lt;br /&gt;&lt;br /&gt;Now that I have explained how mergeFactor and maxMergeDocs work, you can see that using a higher value for mergeFactor will cause Lucene to use more RAM, but will let Lucene write data to disk less frequently, which will speed up the indexing process. A smaller mergeFactor will use less memory and will cause the index to be updated more frequently, which will make it more up-to-date, but will also slow down the indexing process. Similarly, a larger maxMergeDocs is better suited for batch indexing, and a smaller maxMergeDocs is better for more interactive indexing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3304792587797491241-3614525505253377874?l=search-lucene.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yaJ3enY8mqR75o-SlL0-X1_-S9I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yaJ3enY8mqR75o-SlL0-X1_-S9I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yaJ3enY8mqR75o-SlL0-X1_-S9I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yaJ3enY8mqR75o-SlL0-X1_-S9I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=1bFlbvIl"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=sNTHtYQ0"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?i=sNTHtYQ0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=y5fCueNl"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3304792587797491241/posts/default/3614525505253377874?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3304792587797491241/posts/default/3614525505253377874?v=2" /><link rel="alternate" type="text/html" href="http://search-lucene.blogspot.com/2008/08/indexing-speed-factors.html" title="Indexing Speed Factors" /><author><name>Software Wikipedia</name><uri>http://www.blogger.com/profile/16978304261932493302</uri><email>software.wikipedia@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="05041989334443245877" /></author></entry><entry gd:etag="W/&quot;CkIASH48cSp7ImA9WxdbF0g.&quot;"><id>tag:blogger.com,1999:blog-3304792587797491241.post-1758130738588523412</id><published>2008-08-14T14:48:00.000-07:00</published><updated>2008-08-14T14:49:09.079-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-14T14:49:09.079-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Optimization" /><title>Lucene Search Engine: Optimization Techniques</title><content type="html">&lt;ul&gt;&lt;li&gt;Most obvious optimization - always call writer.optimize() after index  update. This will merge index into one segment, and only one Searcher will be  created during search. &lt;/li&gt;&lt;li&gt;Use combined search field for all text fields instead (or on the top) of  indexing them separately and searching with complex query like  &lt;code&gt;field1:query OR field2:query ... OR fieldN:query&lt;/code&gt; &lt;/li&gt;&lt;li&gt;Reducing number of field make indexing and search much faster. Use combined  field instead or on the top of separate fields if needed &lt;/li&gt;&lt;li&gt;Do not use compound file format during indexing.  &lt;code&gt;writer.setUseCompoundFile(false);&lt;/code&gt; If you want to keep index in  single file, turn it on when indexing is complete. &lt;/li&gt;&lt;li&gt;Do not create Searcher and Analyzer for each search. When you create  Searcher, it reads small dictionary into memory to speed up term lookups. It  takes time. Keep Searcher opened and reuse it for every search. When index  changes make sure to recreate you Searcher. &lt;/li&gt;&lt;li&gt;Increase heap size for the java virtual machine &lt;/li&gt;&lt;li&gt;Use quotes “” only to perform exact phrase searches. field:term is much  better than field:”term”&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Merge Factor&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Lucene’s IndexWriter has parameter called Merge Factor. This is a number of segments writer keeps in memory (RAMDirectory) before flushing them to disk. Lucene documentation claims that if you want to speed up indexing, you should increase Merge Factor. Though it sounds logical, there is not much to gain here. And drawback with using big Merge Factor is that there could be too many open files. Keeping it to default 10 or 20 turns out to be the most reasonable choice.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3304792587797491241-1758130738588523412?l=search-lucene.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PSl7wNmCg_l2nlTVrbySojk-Ycg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PSl7wNmCg_l2nlTVrbySojk-Ycg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PSl7wNmCg_l2nlTVrbySojk-Ycg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PSl7wNmCg_l2nlTVrbySojk-Ycg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=uvFnF7ly"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=BXhp1BFa"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?i=BXhp1BFa" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=QCCcBeuZ"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3304792587797491241/posts/default/1758130738588523412?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3304792587797491241/posts/default/1758130738588523412?v=2" /><link rel="alternate" type="text/html" href="http://search-lucene.blogspot.com/2008/08/lucene-search-engine-optimization.html" title="Lucene Search Engine: Optimization Techniques" /><author><name>Software Wikipedia</name><uri>http://www.blogger.com/profile/16978304261932493302</uri><email>software.wikipedia@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="05041989334443245877" /></author></entry><entry gd:etag="W/&quot;CkECRHk7eyp7ImA9WxdbF0g.&quot;"><id>tag:blogger.com,1999:blog-3304792587797491241.post-5727031034196192804</id><published>2008-05-02T14:28:00.000-07:00</published><updated>2008-08-14T14:51:05.703-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-14T14:51:05.703-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Performance" /><title>Lucene: A Powerfull &amp; Free Search Engine by Apache</title><content type="html">&lt;h4&gt;Evaluating search engines&lt;o:p&gt;&lt;/o:p&gt;&lt;/h4&gt; &lt;p&gt;Other widely used open source search engines include Swish-E, Glimpse,  libibex, freeWAIS, and iSearch. Like any software package, each is optimized for  use in particular situations; it is often difficult to deploy these tools  outside of their intended domains. Consider the following features when  evaluating a search engine: &lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt; &lt;ul type="disc"&gt;&lt;br/&gt;&lt;li class="MsoNormal"&gt;&lt;strong&gt;Incremental versus batch indexing:&lt;/strong&gt; Some  search engines only support batch indexing; once they create an index for a set  of documents, adding new documents becomes difficult without reindexing all the  documents. Incremental indexing allows easy adding of documents to an existing  index. For some applications, like those that handle live data feeds,  incremental indexing is critical. Lucene supports both types of indexing.  &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li class="MsoNormal"&gt;&lt;strong&gt;Data sources:&lt;/strong&gt; Many search engines can only  index files or Webpages. This handicaps applications where indexed data comes  from a database, or where multiple virtual documents exist in a single file,  such as a ZIP archive. Lucene allows developers to deliver the document to the  indexer through a &lt;span style="font-size:100%;"&gt;&lt;code&gt;String&lt;/code&gt;&lt;/span&gt; or an &lt;span style="font-size:100%;"&gt;&lt;code&gt;InputStream&lt;/code&gt;&lt;/span&gt;, permitting the data source to be abstracted  from the data. However, with this approach, the developer must supply the  appropriate readers for the data. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul type="disc"&gt;&lt;li class="MsoNormal"&gt;&lt;strong&gt;Indexing control:&lt;/strong&gt; Some search engines can automatically crawl through a directory tree or a Website to find documents to index. While this is convenient if your data is already stored in this manner, crawler-based indexers often provide limited flexibility for applications that require fine-grained control over the indexed documents. Since Lucene operates primarily in incremental mode, it lets the application find and retrieve documents. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li class="MsoNormal"&gt;&lt;strong&gt;File formats:&lt;/strong&gt; Some search engines can only index text or HTML documents; others support a filter mechanism, which offers a simple alternative to indexing word processing documents, SGML documents, and other file formats. Lucene supports such a mechanism. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li class="MsoNormal"&gt;&lt;strong&gt;Content tagging:&lt;/strong&gt; Some search engines treat a document as a single stream of tokens; others allow the specification of multiple data fields within a document, such as "subject," "abstract," "author," and "body." This permits semantically richer queries like "author &lt;em&gt;contains&lt;/em&gt; &lt;st1:city st="on"&gt;&lt;st1:place st="on"&gt;Hamilton&lt;/st1:place&gt;&lt;/st1:city&gt; &lt;em&gt;AND&lt;/em&gt; body &lt;em&gt;contains&lt;/em&gt; Constitution." Lucene supports content tagging by treating documents as collections of fields, and supports queries that specify which field(s) to search. &lt;o:p&gt;&lt;/o:p&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul type="disc"&gt;&lt;br/&gt;&lt;li class="MsoNormal"&gt;&lt;strong&gt;Stop-word processing&lt;/strong&gt;: Common words, such as "a," "and," and "the," add little value to a search index. But since these words are so common, cataloging them will contribute considerably to the indexing time and index size. Most search engines will not index certain words, called &lt;em&gt;stop words.&lt;/em&gt; Some use a list of stop words, while others select stop  words statistically. Lucene handles stop words with the more general &lt;span style="font-size:100%;"&gt;&lt;code&gt;Analyzer&lt;/code&gt;&lt;/span&gt; mechanism, to be described later, and provides  the &lt;span style="font-size:100%;"&gt;&lt;code&gt;StopAnalyzer&lt;/code&gt;&lt;/span&gt; class, which eliminates stop  words from the input stream. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li class="MsoNormal"&gt;&lt;strong&gt;Stemming:&lt;/strong&gt; Often, a user desires a query for one word to match other similar words. For example, a query for "jump" should probably also match the words "jumped," "jumper," or "jumps." Reducing a word to its root form is called &lt;em&gt;stemming&lt;/em&gt;. Lucene does not yet implement  stemming, but you could easily add a stemmer through a more sophisticated  &lt;span style="font-size:100%;"&gt;&lt;code&gt;Analyzer&lt;/code&gt; &lt;/span&gt;class. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li class="MsoNormal"&gt;&lt;strong&gt;Query features:&lt;/strong&gt; Search engines support a  variety of query features. Some support full Boolean queries; others support  only &lt;em&gt;and&lt;/em&gt; queries. Some return a "relevance" score with each hit. Some  can handle adjacency or proximity queries -- "search &lt;em&gt;followed by&lt;/em&gt;  engine" or "Knicks &lt;em&gt;near&lt;/em&gt; Celtics" -- others can only search on single keywords. Some can search multiple indexes at once and merge the results to give a meaningful relevance score. Lucene supports a wide range of query features, including all of those listed above. However, Lucene does not support the valuable Soundex, or "sounds like," query. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li class="MsoNormal"&gt;&lt;strong&gt;Concurrency:&lt;/strong&gt; Can multiple users search an index at the same time? Can a user search an index while another updates it? Lucene allows users to search an index transactionally, even if another user is simultaneously updating the index. &lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;&lt;br/&gt;&lt;li class="MsoNormal"&gt;&lt;strong&gt;Non-English support:&lt;/strong&gt; Many search engines implicitly assume that English is the target language; this is evident in areas such as stop-word lists, stemming algorithms, and the use of proximity to match phrase queries. As Lucene preprocesses the input stream through the &lt;span style="font-size:100%;"&gt;&lt;code&gt;Analyzer&lt;/code&gt; &lt;/span&gt;class provided by the developer, it is possible  to perform language-specific filtering.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3304792587797491241-5727031034196192804?l=search-lucene.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/icoNxardosVTs3c2uUbOKwuOs80/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/icoNxardosVTs3c2uUbOKwuOs80/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/icoNxardosVTs3c2uUbOKwuOs80/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/icoNxardosVTs3c2uUbOKwuOs80/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=xV2rTBeV"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=QaqxzFDa"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?i=QaqxzFDa" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/SearchEngineLucene?a=DiTqsO1p"&gt;&lt;img src="http://feeds.feedburner.com/~f/SearchEngineLucene?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://search-lucene.blogspot.com/feeds/5727031034196192804/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://search-lucene.blogspot.com/2008/05/lucene-powerfull-free-search-engine-by.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/3304792587797491241/posts/default/5727031034196192804?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/3304792587797491241/posts/default/5727031034196192804?v=2" /><link rel="alternate" type="text/html" href="http://search-lucene.blogspot.com/2008/05/lucene-powerfull-free-search-engine-by.html" title="Lucene: A Powerfull &amp; Free Search Engine by Apache" /><author><name>Software Wikipedia</name><uri>http://www.blogger.com/profile/16978304261932493302</uri><email>software.wikipedia@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="05041989334443245877" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></entry></feed>
