public void init(IndexUpdater indexUpdater, IndexRebuilder indexRebuilder, XWikiContext context) { super.init(context); try { @SuppressWarnings("unchecked") Class<? extends Analyzer> clazz = (Class<? extends Analyzer>) Class.forName(context.getWiki().Param(PROP_ANALYZER, DEFAULT_ANALYZER)); this.analyzer = clazz.getConstructor(Version.class).newInstance(Version.LUCENE_36); } catch (Exception e) { LOGGER.error("Error instantiating analyzer: {}", e.getMessage()); LOGGER.warn("Using default analyzer class: " + DEFAULT_ANALYZER); try { @SuppressWarnings("unchecked") Class<? extends Analyzer> clazz = (Class<? extends Analyzer>) Class.forName(DEFAULT_ANALYZER); this.analyzer = clazz.getConstructor(Version.class).newInstance(Version.LUCENE_36); } catch (Exception e1) { throw new RuntimeException( "Instantiation of default analyzer " + DEFAULT_ANALYZER + " failed", e1); } } Map<String, Analyzer> specialAnalyzers = new HashMap<String, Analyzer>(); Analyzer preserve = new KeywordAnalyzer(); specialAnalyzers.put(IndexFields.DOCUMENT_EXACTSPACE, preserve); specialAnalyzers.put(IndexFields.DOCUMENT_WIKI, preserve); specialAnalyzers.put(IndexFields.DOCUMENT_TYPE, preserve); specialAnalyzers.put(IndexFields.DOCUMENT_LANGUAGE, preserve); this.analyzer = new PerFieldAnalyzerWrapper(this.analyzer, specialAnalyzers); LOGGER.debug("Assigning index updater: {}", indexUpdater); if (this.indexDirs == null) { this.indexDirs = context.getWiki().Param(PROP_INDEX_DIR); if (StringUtils.isEmpty(this.indexDirs)) { File workDir = getLuceneWorkDirectory(); this.indexDirs = workDir.getAbsolutePath(); } } this.indexUpdater = indexUpdater; this.indexUpdater.setAnalyzer(this.analyzer); this.indexUpdaterThread = new Thread(indexUpdater, "Lucene Index Updater"); this.indexUpdaterThread.start(); this.indexRebuilder = indexRebuilder; openIndexReaders(context); // Register the Index Updater as an Event Listener so that modified documents/attachments are // added to the // Lucene indexing queue. // If the Index Updater is already registered don't do anything. ObservationManager observationManager = Utils.getComponent(ObservationManager.class); if (observationManager.getListener(indexUpdater.getName()) == null) { observationManager.addListener(indexUpdater); } LOGGER.debug("Lucene plugin initialized."); }
public void init(IndexUpdater indexUpdater, XWikiContext context) { Directory directory = indexUpdater.getDirectory(); boolean needInitialRebuild = true; needInitialRebuild = !DirectoryReader.indexExists(directory); IndexRebuilder indexRebuilder = new IndexRebuilder(indexUpdater, context); if (needInitialRebuild) { indexRebuilder.startRebuildIndex(context); LOGGER.info("Launched initial lucene indexing"); } init(indexUpdater, indexRebuilder, context); }