Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
LuceneReindexer.java
Package: jforum-2.1.8-src.zip [view]
Upload User: gdxydsw
Upload Date: 2019-01-29
Package Size: 16721k
Code Size: 6k
Category:
Java Develop
Development Platform:
Java
- /*
- * Copyright (c) JForum Team
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * 1) Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
- * following disclaimer.
- * 2) Redistributions in binary form must reproduce the
- * above copyright notice, this list of conditions and
- * the following disclaimer in the documentation and/or
- * other materials provided with the distribution.
- * 3) Neither the name of "Rafael Steil" nor
- * the names of its contributors may be used to endorse
- * or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
- * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
- * IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
- * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
- *
- * Created on 06/08/2007 15:20:23
- *
- * The JForum Project
- * http://www.jforum.net
- */
- package net.jforum.search;
- import java.io.IOException;
- import java.util.Iterator;
- import java.util.List;
- import net.jforum.JForumExecutionContext;
- import net.jforum.dao.DataAccessDriver;
- import net.jforum.dao.LuceneDAO;
- import net.jforum.entities.Post;
- import net.jforum.exceptions.ForumException;
- import net.jforum.util.preferences.ConfigKeys;
- import net.jforum.util.preferences.SystemGlobals;
- import org.apache.lucene.search.IndexSearcher;
- /**
- * @author Rafael Steil
- * @version $Id: LuceneReindexer.java,v 1.5 2007/09/09 16:43:55 rafaelsteil Exp $
- */
- public class LuceneReindexer
- {
- private LuceneSettings settings;
- private LuceneReindexArgs args;
- private boolean recreate;
- public LuceneReindexer(LuceneSettings settings, LuceneReindexArgs args, boolean recreate)
- {
- this.args = args;
- this.recreate = recreate;
- this.settings = settings;
- }
- public void startProcess()
- {
- this.reindex();
- }
- public void startBackgroundProcess()
- {
- Runnable indexingJob = new Runnable() {
- public void run() {
- reindex();
- }
- };
- SystemGlobals.setValue(ConfigKeys.LUCENE_CURRENTLY_INDEXING, "1");
- Thread thread = new Thread(indexingJob);
- thread.start();
- }
- private void reindex()
- {
- try {
- if (recreate) {
- this.settings.createIndexDirectory(SystemGlobals.getValue(ConfigKeys.LUCENE_INDEX_WRITE_PATH));
- }
- }
- catch (IOException e) {
- throw new ForumException(e);
- }
- LuceneDAO dao = DataAccessDriver.getInstance().newLuceneDAO();
- IndexSearcher searcher = null;
- LuceneSearch luceneSearch = ((LuceneManager)SearchFacade.manager()).luceneSearch();
- LuceneIndexer luceneIndexer = ((LuceneManager)SearchFacade.manager()).luceneIndexer();
- int fetchCount = SystemGlobals.getIntValue(ConfigKeys.LUCENE_INDEXER_DB_FETCH_COUNT);
- try {
- if (!recreate) {
- searcher = new IndexSearcher(this.settings.directory());
- }
- boolean hasMorePosts = true;
- long processStart = System.currentTimeMillis();
- int firstPostId = args.filterByMessage()
- ? args.getFirstPostId()
- : dao.firstPostIdByDate(args.getFromDate());
- int lastPostId = args.filterByMessage()
- ? args.getLastPostId()
- : dao.lastPostIdByDate(args.getToDate());
- int counter = 1;
- int indexTotal = 0;
- long indexRangeStart = System.currentTimeMillis();
- while (hasMorePosts) {
- boolean contextFinished = false;
- int toPostId = firstPostId + fetchCount < lastPostId
- ? firstPostId + fetchCount
- : lastPostId;
- try {
- JForumExecutionContext ex = JForumExecutionContext.get();
- JForumExecutionContext.set(ex);
- List l = dao.getPostsToIndex(firstPostId, toPostId);
- if (counter >= 5000) {
- long end = System.currentTimeMillis();
- System.out.println("Indexed ~5000 documents in "
- + (end - indexRangeStart) + " ms (" + indexTotal + " so far)");
- indexRangeStart = end;
- counter = 0;
- }
- JForumExecutionContext.finish();
- contextFinished = true;
- for (Iterator iter = l.iterator(); iter.hasNext(); ) {
- if ("0".equals(SystemGlobals.getValue(ConfigKeys.LUCENE_CURRENTLY_INDEXING))) {
- hasMorePosts = false;
- break;
- }
- Post post = (Post)iter.next();
- if (!recreate && args.avoidDuplicatedRecords()) {
- if (luceneSearch.findDocumentByPostId(post.getId()) != null) {
- continue;
- }
- }
- luceneIndexer.batchCreate(post);
- counter++;
- indexTotal++;
- }
- firstPostId += fetchCount;
- hasMorePosts = hasMorePosts && l.size() > 0;
- }
- finally {
- if (!contextFinished) {
- JForumExecutionContext.finish();
- }
- }
- }
- long end = System.currentTimeMillis();
- System.out.println("**** Total: " + (end - processStart) + " ms");
- }
- catch (IOException e) {
- throw new ForumException(e);
- }
- finally {
- SystemGlobals.setValue(ConfigKeys.LUCENE_CURRENTLY_INDEXING, "0");
- luceneIndexer.flushRAMDirectory();
- if (searcher != null) {
- try { searcher.close(); }
- catch (Exception e) {}
- }
- }
- }
- }