This is an automated email from the ASF dual-hosted git repository.

juanpablo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jspwiki.git

commit 1caf85ac50871b0eef48556b148702d7e5ec4e04
Author: juanpablo <juanpa...@apache.org>
AuthorDate: Wed Oct 14 19:46:46 2020 +0200

    LuceneSearchProvider using now NIOFSDirectory instead of (deprecated) 
SimpleFSDirectory
    
    Also, all Lucene's index writes are synchronized, whereas reads are not. 
This should help with issues noted at JSPWIKI-1131
---
 .../apache/wiki/search/LuceneSearchProvider.java   | 30 ++++++++--------------
 1 file changed, 11 insertions(+), 19 deletions(-)

diff --git 
a/jspwiki-main/src/main/java/org/apache/wiki/search/LuceneSearchProvider.java 
b/jspwiki-main/src/main/java/org/apache/wiki/search/LuceneSearchProvider.java
index 8d8bd0e..812186a 100644
--- 
a/jspwiki-main/src/main/java/org/apache/wiki/search/LuceneSearchProvider.java
+++ 
b/jspwiki-main/src/main/java/org/apache/wiki/search/LuceneSearchProvider.java
@@ -45,7 +45,7 @@ import org.apache.lucene.search.highlight.QueryScorer;
 import org.apache.lucene.search.highlight.SimpleHTMLEncoder;
 import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
 import org.apache.lucene.store.Directory;
-import org.apache.lucene.store.SimpleFSDirectory;
+import org.apache.lucene.store.NIOFSDirectory;
 import org.apache.wiki.InternalWikiException;
 import org.apache.wiki.WatchDog;
 import org.apache.wiki.WikiBackgroundThread;
@@ -67,19 +67,9 @@ import org.apache.wiki.util.ClassUtil;
 import org.apache.wiki.util.FileUtil;
 import org.apache.wiki.util.TextUtil;
 
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.StringReader;
-import java.io.StringWriter;
+import java.io.*;
 import java.lang.reflect.Constructor;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.Properties;
+import java.util.*;
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
 
@@ -205,7 +195,7 @@ public class LuceneSearchProvider implements SearchProvider 
{
 
                 log.info("Starting Lucene reindexing, this can take a couple 
of minutes...");
 
-                final Directory luceneDir = new SimpleFSDirectory( 
dir.toPath() );
+                final Directory luceneDir = new NIOFSDirectory( dir.toPath() );
                 try( final IndexWriter writer = getIndexWriter( luceneDir ) ) {
                     final Collection< Page > allPages = m_engine.getManager( 
PageManager.class ).getAllPages();
                     for( final Page page : allPages ) {
@@ -312,7 +302,7 @@ public class LuceneSearchProvider implements SearchProvider 
{
         pageRemoved( page );
 
         // Now add back the new version.
-        try( final Directory luceneDir = new SimpleFSDirectory( new File( 
m_luceneDirectory ).toPath() );
+        try( final Directory luceneDir = new NIOFSDirectory( new File( 
m_luceneDirectory ).toPath() );
              final IndexWriter writer = getIndexWriter( luceneDir ) ) {
             luceneIndexPage( page, text, writer );
         } catch( final IOException e ) {
@@ -400,7 +390,9 @@ public class LuceneSearchProvider implements SearchProvider 
{
             field = new Field( LUCENE_PAGE_KEYWORDS, page.getAttribute( 
"keywords" ).toString(), TextField.TYPE_STORED );
             doc.add( field );
         }
-        writer.addDocument(doc);
+        synchronized( writer ) {
+            writer.addDocument(doc);
+        }
 
         return doc;
     }
@@ -409,8 +401,8 @@ public class LuceneSearchProvider implements SearchProvider 
{
      *  {@inheritDoc}
      */
     @Override
-    public void pageRemoved( final Page page ) {
-        try( final Directory luceneDir = new SimpleFSDirectory( new File( 
m_luceneDirectory ).toPath() );
+    public synchronized void pageRemoved( final Page page ) {
+        try( final Directory luceneDir = new NIOFSDirectory( new File( 
m_luceneDirectory ).toPath() );
              final IndexWriter writer = getIndexWriter( luceneDir ) ) {
             final Query query = new TermQuery( new Term( LUCENE_ID, 
page.getName() ) );
             writer.deleteDocuments( query );
@@ -479,7 +471,7 @@ public class LuceneSearchProvider implements SearchProvider 
{
         ArrayList<SearchResult> list = null;
         Highlighter highlighter = null;
 
-        try( final Directory luceneDir = new SimpleFSDirectory( new File( 
m_luceneDirectory ).toPath() );
+        try( final Directory luceneDir = new NIOFSDirectory( new File( 
m_luceneDirectory ).toPath() );
              final IndexReader reader = DirectoryReader.open( luceneDir ) ) {
             final String[] queryfields = { LUCENE_PAGE_CONTENTS, 
LUCENE_PAGE_NAME, LUCENE_AUTHOR, LUCENE_ATTACHMENTS, LUCENE_PAGE_KEYWORDS };
             final QueryParser qp = new MultiFieldQueryParser( queryfields, 
getLuceneAnalyzer() );

Reply via email to