You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by gh...@apache.org on 2013/04/07 10:09:28 UTC
svn commit: r1465341 - in /roller/trunk: ./
weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/
weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/
Author: ghuber
Date: Sun Apr 7 08:09:27 2013
New Revision: 1465341
URL: http://svn.apache.org/r1465341
Log:
Upgrade to velocity 1.7 and remove tabs on source.
Modified:
roller/trunk/pom.xml
roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/FieldConstants.java
roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/IndexManagerImpl.java
roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/IndexUtil.java
roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/IndexOperation.java
roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/ReIndexEntryOperation.java
roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/RebuildWebsiteIndexOperation.java
roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/RemoveEntryOperation.java
roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/RemoveWebsiteIndexOperation.java
roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/SearchOperation.java
Modified: roller/trunk/pom.xml
URL: http://svn.apache.org/viewvc/roller/trunk/pom.xml?rev=1465341&r1=1465340&r2=1465341&view=diff
==============================================================================
--- roller/trunk/pom.xml (original)
+++ roller/trunk/pom.xml Sun Apr 7 08:09:27 2013
@@ -303,7 +303,7 @@
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
- <version>1.6</version>
+ <version>1.7</version>
</dependency>
<dependency>
Modified: roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/FieldConstants.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/FieldConstants.java?rev=1465341&r1=1465340&r2=1465341&view=diff
==============================================================================
--- roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/FieldConstants.java (original)
+++ roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/FieldConstants.java Sun Apr 7 08:09:27 2013
@@ -27,24 +27,24 @@ import org.apache.lucene.util.Version;
*/
public final class FieldConstants {
- // Set what version we are on
- public static final Version LUCENE_VERSION = Version.LUCENE_36;
+ // Set what version we are on
+ public static final Version LUCENE_VERSION = Version.LUCENE_36;
- public static final String ANCHOR = "anchor";
- public static final String UPDATED = "updated";
- public static final String ID = "id";
- public static final String USERNAME = "username";
- public static final String CATEGORY = "cat";
- public static final String TITLE = "title";
- public static final String PUBLISHED = "published";
- public static final String CONTENT = "content";
- public static final String CONTENT_STORED = "content_stored";
- public static final String C_CONTENT = "comment";
- public static final String C_EMAIL = "email";
- public static final String C_NAME = "name";
- public static final String CONSTANT = "constant";
- public static final String CONSTANT_V = "v"; // must be lowercase, or match
- // the transform rules of
- // the analyzer
- public static final String WEBSITE_HANDLE = "handle";
+ public static final String ANCHOR = "anchor";
+ public static final String UPDATED = "updated";
+ public static final String ID = "id";
+ public static final String USERNAME = "username";
+ public static final String CATEGORY = "cat";
+ public static final String TITLE = "title";
+ public static final String PUBLISHED = "published";
+ public static final String CONTENT = "content";
+ public static final String CONTENT_STORED = "content_stored";
+ public static final String C_CONTENT = "comment";
+ public static final String C_EMAIL = "email";
+ public static final String C_NAME = "name";
+ public static final String CONSTANT = "constant";
+ public static final String CONSTANT_V = "v"; // must be lowercase, or match
+ // the transform rules of
+ // the analyzer
+ public static final String WEBSITE_HANDLE = "handle";
}
Modified: roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/IndexManagerImpl.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/IndexManagerImpl.java?rev=1465341&r1=1465340&r2=1465341&view=diff
==============================================================================
--- roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/IndexManagerImpl.java (original)
+++ roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/IndexManagerImpl.java Sun Apr 7 08:09:27 2013
@@ -56,361 +56,361 @@ import org.apache.roller.weblogger.confi
*/
@com.google.inject.Singleton
public class IndexManagerImpl implements IndexManager {
- // ~ Static fields/initializers
- // =============================================
+ // ~ Static fields/initializers
+ // =============================================
- private IndexReader reader;
- private final Weblogger roller;
+ private IndexReader reader;
+ private final Weblogger roller;
- static Log mLogger = LogFactory.getFactory().getInstance(
- IndexManagerImpl.class);
+ static Log mLogger = LogFactory.getFactory().getInstance(
+ IndexManagerImpl.class);
- // ~ Instance fields
- // ========================================================
-
- private boolean searchEnabled = true;
-
- File indexConsistencyMarker;
-
- private boolean useRAMIndex = false;
-
- private RAMDirectory fRAMindex;
-
- private String indexDir = null;
-
- private boolean inconsistentAtStartup = false;
-
- private ReadWriteLock rwl = new ReentrantReadWriteLock();
-
- // ~ Constructors
- // ===========================================================
-
- /**
- * Creates a new lucene index manager. This should only be created once.
- * Creating the index manager more than once will definately result in
- * errors. The preferred way of getting an index is through the
- * RollerContext.
- *
- * @param indexDir
- * - the path to the index directory
- */
- @com.google.inject.Inject
- protected IndexManagerImpl(Weblogger roller) {
- this.roller = roller;
-
- // check config to see if the internal search is enabled
- String enabled = WebloggerConfig.getProperty("search.enabled");
- if ("false".equalsIgnoreCase(enabled))
- this.searchEnabled = false;
-
- // we also need to know what our index directory is
- // Note: system property expansion is now handled by WebloggerConfig
- String searchIndexDir = WebloggerConfig.getProperty("search.index.dir");
- this.indexDir = searchIndexDir.replace('/', File.separatorChar);
-
- // a little debugging
- mLogger.info("search enabled: " + this.searchEnabled);
- mLogger.info("index dir: " + this.indexDir);
-
- String test = indexDir + File.separator + ".index-inconsistent";
- indexConsistencyMarker = new File(test);
- }
-
- /**
- * @inheritDoc
- */
- public void initialize() throws InitializationException {
-
- // only initialize the index if search is enabled
- if (this.searchEnabled) {
-
- // 1. If inconsistency marker exists.
- // Delete index
- // 2. if we're using RAM index
- // load ram index wrapper around index
- //
- if (indexConsistencyMarker.exists()) {
- getFSDirectory(true);
- inconsistentAtStartup = true;
- mLogger.debug("Index inconsistent: marker exists");
- } else {
- try {
- File makeIndexDir = new File(indexDir);
- if (!makeIndexDir.exists()) {
- makeIndexDir.mkdirs();
- inconsistentAtStartup = true;
- mLogger.debug("Index inconsistent: new");
- }
- indexConsistencyMarker.createNewFile();
- } catch (IOException e) {
- mLogger.error(e);
- }
- }
-
- if (indexExists()) {
- if (useRAMIndex) {
- Directory filesystem = getFSDirectory(false);
- try {
- fRAMindex = new RAMDirectory(filesystem);
- } catch (IOException e) {
- mLogger.error("Error creating in-memory index", e);
- }
- }
- } else {
- mLogger.debug("Creating index");
- inconsistentAtStartup = true;
- if (useRAMIndex) {
- fRAMindex = new RAMDirectory();
- createIndex(fRAMindex);
- } else {
- createIndex(getFSDirectory(true));
- }
- }
-
- if (isInconsistentAtStartup()) {
- mLogger.info("Index was inconsistent. Rebuilding index in the background...");
- try {
- rebuildWebsiteIndex();
- } catch (WebloggerException e) {
- mLogger.error("ERROR: scheduling re-index operation");
- }
- } else {
- mLogger.info("Index initialized and ready for use.");
- }
- }
-
- }
-
- // ~ Methods
- // ================================================================
-
- public void rebuildWebsiteIndex() throws WebloggerException {
- scheduleIndexOperation(new RebuildWebsiteIndexOperation(roller, this,
- null));
- }
-
- public void rebuildWebsiteIndex(Weblog website) throws WebloggerException {
- scheduleIndexOperation(new RebuildWebsiteIndexOperation(roller, this,
- website));
- }
-
- public void removeWebsiteIndex(Weblog website) throws WebloggerException {
- scheduleIndexOperation(new RemoveWebsiteIndexOperation(roller, this,
- website));
- }
-
- public void addEntryIndexOperation(WeblogEntry entry)
- throws WebloggerException {
- AddEntryOperation addEntry = new AddEntryOperation(roller, this, entry);
- scheduleIndexOperation(addEntry);
- }
-
- public void addEntryReIndexOperation(WeblogEntry entry)
- throws WebloggerException {
- ReIndexEntryOperation reindex = new ReIndexEntryOperation(roller, this,
- entry);
- scheduleIndexOperation(reindex);
- }
-
- public void removeEntryIndexOperation(WeblogEntry entry)
- throws WebloggerException {
- RemoveEntryOperation removeOp = new RemoveEntryOperation(roller, this,
- entry);
- executeIndexOperationNow(removeOp);
- }
-
- public ReadWriteLock getReadWriteLock() {
- return rwl;
- }
-
- public boolean isInconsistentAtStartup() {
- return inconsistentAtStartup;
- }
-
- /**
- * This is the analyzer that will be used to tokenize comment text.
- *
- * @return Analyzer to be used in manipulating the database.
- */
- public static final Analyzer getAnalyzer() {
- return new StandardAnalyzer(FieldConstants.LUCENE_VERSION);
- }
-
- private void scheduleIndexOperation(final IndexOperation op) {
- try {
- // only if search is enabled
- if (this.searchEnabled) {
- mLogger.debug("Starting scheduled index operation: "
- + op.getClass().getName());
- roller.getThreadManager().executeInBackground(op);
- }
- } catch (InterruptedException e) {
- mLogger.error("Error executing operation", e);
- }
- }
-
- /**
- * @param search
- */
- public void executeIndexOperationNow(final IndexOperation op) {
- try {
- // only if search is enabled
- if (this.searchEnabled) {
- mLogger.debug("Executing index operation now: "
- + op.getClass().getName());
- roller.getThreadManager().executeInForeground(op);
- }
- } catch (InterruptedException e) {
- mLogger.error("Error executing operation", e);
- }
- }
-
- public synchronized void resetSharedReader() {
- reader = null;
- }
-
- public synchronized IndexReader getSharedIndexReader() {
- if (reader == null) {
- try {
- reader = IndexReader.open(getIndexDirectory());
- } catch (IOException e) {
- }
- }
- return reader;
- }
-
- /**
- * Get the directory that is used by the lucene index. This method will
- * return null if there is no index at the directory location. If we are
- * using a RAM index, the directory will be a ram directory.
- *
- * @return Directory The directory containing the index, or null if error.
- */
- public Directory getIndexDirectory() {
- if (useRAMIndex) {
- return fRAMindex;
- } else {
- return getFSDirectory(false);
- }
- }
-
- private boolean indexExists() {
- try {
- return IndexReader.indexExists(getIndexDirectory());
- } catch (IOException e) {
- mLogger.error("Problem accessing index directory", e);
- }
- return false;
- }
-
- private Directory getFSDirectory(boolean delete) {
-
- Directory directory = null;
-
- try {
-
- directory = FSDirectory.open(new File(indexDir));
-
- if (delete && directory != null) {
- String[] files = directory.listAll(); // clear old files
- for (int i = 0; i < files.length; i++) {
- File file = new File(indexDir, files[i]);
- if (!file.delete())
- throw new IOException("couldn't delete " + files[i]);
- }
- }
-
- } catch (IOException e) {
- mLogger.error("Problem accessing index directory", e);
- }
-
- return directory;
-
- }
-
- private void createIndex(Directory dir) {
- IndexWriter writer = null;
-
- try {
-
- IndexWriterConfig config = new IndexWriterConfig(
- FieldConstants.LUCENE_VERSION, new LimitTokenCountAnalyzer(
- IndexManagerImpl.getAnalyzer(),
- IndexWriterConfig.DEFAULT_TERM_INDEX_INTERVAL));
-
- writer = new IndexWriter(dir, config);
-
- } catch (IOException e) {
- mLogger.error("Error creating index", e);
- } finally {
- try {
- if (writer != null) {
- writer.close();
- }
- } catch (IOException e) {
- }
- }
- }
-
- private IndexOperation getSaveIndexOperation() {
- return new WriteToIndexOperation(this) {
- public void doRun() {
- Directory dir = getIndexDirectory();
- Directory fsdir = getFSDirectory(true);
-
- IndexWriter writer = null;
-
- try {
- IndexWriterConfig config = new IndexWriterConfig(
- FieldConstants.LUCENE_VERSION,
- new LimitTokenCountAnalyzer(
- IndexManagerImpl.getAnalyzer(),
- IndexWriterConfig.DEFAULT_TERM_INDEX_INTERVAL));
-
- writer = new IndexWriter(fsdir, config);
-
- writer.addIndexes(new Directory[] { dir });
-
- writer.commit();
-
- indexConsistencyMarker.delete();
-
- } catch (IOException e) {
- mLogger.error("Problem saving index to disk", e);
-
- // Delete the directory, since there was a problem saving
- // the RAM contents
- getFSDirectory(true);
- } finally {
- try {
- if (writer != null)
- writer.close();
- } catch (IOException e1) {
- mLogger.warn("Unable to close IndexWriter.");
- }
- }
-
- }
- };
- }
-
- public void release() {
- // no-op
- }
-
- public void shutdown() {
- if (useRAMIndex) {
- scheduleIndexOperation(getSaveIndexOperation());
- } else {
- indexConsistencyMarker.delete();
- }
-
- try {
- if (reader != null)
- reader.close();
- } catch (IOException e) {
- // won't happen, since it was
- }
- }
+ // ~ Instance fields
+ // ========================================================
+
+ private boolean searchEnabled = true;
+
+ File indexConsistencyMarker;
+
+ private boolean useRAMIndex = false;
+
+ private RAMDirectory fRAMindex;
+
+ private String indexDir = null;
+
+ private boolean inconsistentAtStartup = false;
+
+ private ReadWriteLock rwl = new ReentrantReadWriteLock();
+
+ // ~ Constructors
+ // ===========================================================
+
+ /**
+ * Creates a new lucene index manager. This should only be created once.
+ * Creating the index manager more than once will definately result in
+ * errors. The preferred way of getting an index is through the
+ * RollerContext.
+ *
+ * @param indexDir
+ * - the path to the index directory
+ */
+ @com.google.inject.Inject
+ protected IndexManagerImpl(Weblogger roller) {
+ this.roller = roller;
+
+ // check config to see if the internal search is enabled
+ String enabled = WebloggerConfig.getProperty("search.enabled");
+ if ("false".equalsIgnoreCase(enabled))
+ this.searchEnabled = false;
+
+ // we also need to know what our index directory is
+ // Note: system property expansion is now handled by WebloggerConfig
+ String searchIndexDir = WebloggerConfig.getProperty("search.index.dir");
+ this.indexDir = searchIndexDir.replace('/', File.separatorChar);
+
+ // a little debugging
+ mLogger.info("search enabled: " + this.searchEnabled);
+ mLogger.info("index dir: " + this.indexDir);
+
+ String test = indexDir + File.separator + ".index-inconsistent";
+ indexConsistencyMarker = new File(test);
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public void initialize() throws InitializationException {
+
+ // only initialize the index if search is enabled
+ if (this.searchEnabled) {
+
+ // 1. If inconsistency marker exists.
+ // Delete index
+ // 2. if we're using RAM index
+ // load ram index wrapper around index
+ //
+ if (indexConsistencyMarker.exists()) {
+ getFSDirectory(true);
+ inconsistentAtStartup = true;
+ mLogger.debug("Index inconsistent: marker exists");
+ } else {
+ try {
+ File makeIndexDir = new File(indexDir);
+ if (!makeIndexDir.exists()) {
+ makeIndexDir.mkdirs();
+ inconsistentAtStartup = true;
+ mLogger.debug("Index inconsistent: new");
+ }
+ indexConsistencyMarker.createNewFile();
+ } catch (IOException e) {
+ mLogger.error(e);
+ }
+ }
+
+ if (indexExists()) {
+ if (useRAMIndex) {
+ Directory filesystem = getFSDirectory(false);
+ try {
+ fRAMindex = new RAMDirectory(filesystem);
+ } catch (IOException e) {
+ mLogger.error("Error creating in-memory index", e);
+ }
+ }
+ } else {
+ mLogger.debug("Creating index");
+ inconsistentAtStartup = true;
+ if (useRAMIndex) {
+ fRAMindex = new RAMDirectory();
+ createIndex(fRAMindex);
+ } else {
+ createIndex(getFSDirectory(true));
+ }
+ }
+
+ if (isInconsistentAtStartup()) {
+ mLogger.info("Index was inconsistent. Rebuilding index in the background...");
+ try {
+ rebuildWebsiteIndex();
+ } catch (WebloggerException e) {
+ mLogger.error("ERROR: scheduling re-index operation");
+ }
+ } else {
+ mLogger.info("Index initialized and ready for use.");
+ }
+ }
+
+ }
+
+ // ~ Methods
+ // ================================================================
+
+ public void rebuildWebsiteIndex() throws WebloggerException {
+ scheduleIndexOperation(new RebuildWebsiteIndexOperation(roller, this,
+ null));
+ }
+
+ public void rebuildWebsiteIndex(Weblog website) throws WebloggerException {
+ scheduleIndexOperation(new RebuildWebsiteIndexOperation(roller, this,
+ website));
+ }
+
+ public void removeWebsiteIndex(Weblog website) throws WebloggerException {
+ scheduleIndexOperation(new RemoveWebsiteIndexOperation(roller, this,
+ website));
+ }
+
+ public void addEntryIndexOperation(WeblogEntry entry)
+ throws WebloggerException {
+ AddEntryOperation addEntry = new AddEntryOperation(roller, this, entry);
+ scheduleIndexOperation(addEntry);
+ }
+
+ public void addEntryReIndexOperation(WeblogEntry entry)
+ throws WebloggerException {
+ ReIndexEntryOperation reindex = new ReIndexEntryOperation(roller, this,
+ entry);
+ scheduleIndexOperation(reindex);
+ }
+
+ public void removeEntryIndexOperation(WeblogEntry entry)
+ throws WebloggerException {
+ RemoveEntryOperation removeOp = new RemoveEntryOperation(roller, this,
+ entry);
+ executeIndexOperationNow(removeOp);
+ }
+
+ public ReadWriteLock getReadWriteLock() {
+ return rwl;
+ }
+
+ public boolean isInconsistentAtStartup() {
+ return inconsistentAtStartup;
+ }
+
+ /**
+ * This is the analyzer that will be used to tokenize comment text.
+ *
+ * @return Analyzer to be used in manipulating the database.
+ */
+ public static final Analyzer getAnalyzer() {
+ return new StandardAnalyzer(FieldConstants.LUCENE_VERSION);
+ }
+
+ private void scheduleIndexOperation(final IndexOperation op) {
+ try {
+ // only if search is enabled
+ if (this.searchEnabled) {
+ mLogger.debug("Starting scheduled index operation: "
+ + op.getClass().getName());
+ roller.getThreadManager().executeInBackground(op);
+ }
+ } catch (InterruptedException e) {
+ mLogger.error("Error executing operation", e);
+ }
+ }
+
+ /**
+ * @param search
+ */
+ public void executeIndexOperationNow(final IndexOperation op) {
+ try {
+ // only if search is enabled
+ if (this.searchEnabled) {
+ mLogger.debug("Executing index operation now: "
+ + op.getClass().getName());
+ roller.getThreadManager().executeInForeground(op);
+ }
+ } catch (InterruptedException e) {
+ mLogger.error("Error executing operation", e);
+ }
+ }
+
+ public synchronized void resetSharedReader() {
+ reader = null;
+ }
+
+ public synchronized IndexReader getSharedIndexReader() {
+ if (reader == null) {
+ try {
+ reader = IndexReader.open(getIndexDirectory());
+ } catch (IOException e) {
+ }
+ }
+ return reader;
+ }
+
+ /**
+ * Get the directory that is used by the lucene index. This method will
+ * return null if there is no index at the directory location. If we are
+ * using a RAM index, the directory will be a ram directory.
+ *
+ * @return Directory The directory containing the index, or null if error.
+ */
+ public Directory getIndexDirectory() {
+ if (useRAMIndex) {
+ return fRAMindex;
+ } else {
+ return getFSDirectory(false);
+ }
+ }
+
+ private boolean indexExists() {
+ try {
+ return IndexReader.indexExists(getIndexDirectory());
+ } catch (IOException e) {
+ mLogger.error("Problem accessing index directory", e);
+ }
+ return false;
+ }
+
+ private Directory getFSDirectory(boolean delete) {
+
+ Directory directory = null;
+
+ try {
+
+ directory = FSDirectory.open(new File(indexDir));
+
+ if (delete && directory != null) {
+ String[] files = directory.listAll(); // clear old files
+ for (int i = 0; i < files.length; i++) {
+ File file = new File(indexDir, files[i]);
+ if (!file.delete())
+ throw new IOException("couldn't delete " + files[i]);
+ }
+ }
+
+ } catch (IOException e) {
+ mLogger.error("Problem accessing index directory", e);
+ }
+
+ return directory;
+
+ }
+
+ private void createIndex(Directory dir) {
+ IndexWriter writer = null;
+
+ try {
+
+ IndexWriterConfig config = new IndexWriterConfig(
+ FieldConstants.LUCENE_VERSION, new LimitTokenCountAnalyzer(
+ IndexManagerImpl.getAnalyzer(),
+ IndexWriterConfig.DEFAULT_TERM_INDEX_INTERVAL));
+
+ writer = new IndexWriter(dir, config);
+
+ } catch (IOException e) {
+ mLogger.error("Error creating index", e);
+ } finally {
+ try {
+ if (writer != null) {
+ writer.close();
+ }
+ } catch (IOException e) {
+ }
+ }
+ }
+
+ private IndexOperation getSaveIndexOperation() {
+ return new WriteToIndexOperation(this) {
+ public void doRun() {
+ Directory dir = getIndexDirectory();
+ Directory fsdir = getFSDirectory(true);
+
+ IndexWriter writer = null;
+
+ try {
+ IndexWriterConfig config = new IndexWriterConfig(
+ FieldConstants.LUCENE_VERSION,
+ new LimitTokenCountAnalyzer(
+ IndexManagerImpl.getAnalyzer(),
+ IndexWriterConfig.DEFAULT_TERM_INDEX_INTERVAL));
+
+ writer = new IndexWriter(fsdir, config);
+
+ writer.addIndexes(new Directory[] { dir });
+
+ writer.commit();
+
+ indexConsistencyMarker.delete();
+
+ } catch (IOException e) {
+ mLogger.error("Problem saving index to disk", e);
+
+ // Delete the directory, since there was a problem saving
+ // the RAM contents
+ getFSDirectory(true);
+ } finally {
+ try {
+ if (writer != null)
+ writer.close();
+ } catch (IOException e1) {
+ mLogger.warn("Unable to close IndexWriter.");
+ }
+ }
+
+ }
+ };
+ }
+
+ public void release() {
+ // no-op
+ }
+
+ public void shutdown() {
+ if (useRAMIndex) {
+ scheduleIndexOperation(getSaveIndexOperation());
+ } else {
+ indexConsistencyMarker.delete();
+ }
+
+ try {
+ if (reader != null)
+ reader.close();
+ } catch (IOException e) {
+ // won't happen, since it was
+ }
+ }
}
Modified: roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/IndexUtil.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/IndexUtil.java?rev=1465341&r1=1465340&r2=1465341&view=diff
==============================================================================
--- roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/IndexUtil.java (original)
+++ roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/IndexUtil.java Sun Apr 7 08:09:27 2013
@@ -33,45 +33,45 @@ import org.apache.lucene.index.Term;
*/
public class IndexUtil {
- /**
- * Create a lucene term from the first token of the input string.
- *
- * @param field
- * The lucene document field to create a term with
- * @param input
- * The input you wish to convert into a term
- *
- * @return Lucene search term
- */
- public static final Term getTerm(String field, String input) {
-
- if (input == null || field == null)
- return null;
-
- Analyzer analyer = IndexManagerImpl.getAnalyzer();
-
- TokenStream tokens = analyer
- .tokenStream(field, new StringReader(input));
-
- CharTermAttribute termAtt = (CharTermAttribute) tokens
- .addAttribute(CharTermAttribute.class);
-
- Term term = null;
-
- try {
-
- tokens.reset();
-
- if (tokens.incrementToken()) {
- String termt = termAtt.toString();
- term = new Term(field, termt);
- }
-
- } catch (IOException e) {
- // ignored
- }
+ /**
+ * Create a lucene term from the first token of the input string.
+ *
+ * @param field
+ * The lucene document field to create a term with
+ * @param input
+ * The input you wish to convert into a term
+ *
+ * @return Lucene search term
+ */
+ public static final Term getTerm(String field, String input) {
+
+ if (input == null || field == null)
+ return null;
+
+ Analyzer analyer = IndexManagerImpl.getAnalyzer();
+
+ TokenStream tokens = analyer
+ .tokenStream(field, new StringReader(input));
+
+ CharTermAttribute termAtt = (CharTermAttribute) tokens
+ .addAttribute(CharTermAttribute.class);
+
+ Term term = null;
+
+ try {
+
+ tokens.reset();
+
+ if (tokens.incrementToken()) {
+ String termt = termAtt.toString();
+ term = new Term(field, termt);
+ }
+
+ } catch (IOException e) {
+ // ignored
+ }
- return term;
- }
+ return term;
+ }
}
Modified: roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/IndexOperation.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/IndexOperation.java?rev=1465341&r1=1465340&r2=1465341&view=diff
==============================================================================
--- roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/IndexOperation.java (original)
+++ roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/IndexOperation.java Sun Apr 7 08:09:27 2013
@@ -48,174 +48,174 @@ import org.apache.roller.weblogger.util.
*/
public abstract class IndexOperation implements Runnable {
- private static Log mLogger = LogFactory.getFactory().getInstance(
- IndexOperation.class);
+ private static Log mLogger = LogFactory.getFactory().getInstance(
+ IndexOperation.class);
- // ~ Instance fields
- // ========================================================
- protected IndexManagerImpl manager;
- private IndexWriter writer;
-
- // ~ Constructors
- // ===========================================================
- public IndexOperation(IndexManagerImpl manager) {
- this.manager = manager;
- }
-
- // ~ Methods
- // ================================================================
- protected Document getDocument(WeblogEntry data) {
-
- // Actual comment content is indexed only if search.index.comments
- // is true or absent from the (static) configuration properties.
- // If false in the configuration, comments are treated as if empty.
- boolean indexComments = WebloggerConfig.getBooleanProperty(
- "search.index.comments", true);
-
- String commentContent = "";
- String commentEmail = "";
- String commentName = "";
- if (indexComments) {
- List comments = data.getComments();
- if (comments != null) {
- StringBuilder commentEmailBld = new StringBuilder();
- StringBuilder commentContentBld = new StringBuilder();
- StringBuilder commentNameBld = new StringBuilder();
- for (Iterator cItr = comments.iterator(); cItr.hasNext();) {
- WeblogEntryComment comment = (WeblogEntryComment) cItr
- .next();
- if (comment.getContent() != null) {
- commentContentBld.append(comment.getContent());
- commentContentBld.append(",");
- }
- if (comment.getEmail() != null) {
- commentEmailBld.append(comment.getEmail());
- commentEmailBld.append(",");
- }
- if (comment.getName() != null) {
- commentNameBld.append(comment.getName());
- commentNameBld.append(",");
- }
- }
- commentEmail = commentEmailBld.toString();
- commentContent = commentContentBld.toString();
- commentName = commentNameBld.toString();
- }
- }
-
- Document doc = new Document();
-
- // keyword
- doc.add(new Field(FieldConstants.ID, data.getId(), Field.Store.YES,
- Field.Index.NOT_ANALYZED));
-
- // keyword
- doc.add(new Field(FieldConstants.WEBSITE_HANDLE, data.getWebsite()
- .getHandle(), Field.Store.YES, Field.Index.NOT_ANALYZED));
-
- // unindexed
- doc.add(new Field(FieldConstants.ANCHOR, data.getAnchor(),
- Field.Store.YES, Field.Index.NO));
-
- // text
- doc.add(new Field(FieldConstants.USERNAME, data.getCreator()
- .getUserName(), Field.Store.YES, Field.Index.ANALYZED));
-
- // text
- doc.add(new Field(FieldConstants.TITLE, data.getTitle(),
- Field.Store.YES, Field.Index.ANALYZED));
-
- // index the entry text, but don't store it - moved to end of block
- // unstored
- doc.add(new Field(FieldConstants.CONTENT, data.getText(),
- Field.Store.NO, Field.Index.ANALYZED));
-
- // store an abbreviated version of the entry text, but don't index
- // unindexed
- doc.add(new Field(FieldConstants.CONTENT_STORED, Utilities
- .truncateNicely(Utilities.removeHTML(data.getText()), 240, 260,
- "..."), Field.Store.YES, Field.Index.NO));
-
- // keyword
- doc.add(new Field(FieldConstants.UPDATED, data.getUpdateTime()
- .toString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
-
- // keyword
- doc.add(new Field(FieldConstants.PUBLISHED, data.getPubTime()
- .toString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
-
- // index Comments
- // unstored
- doc.add(new Field(FieldConstants.C_CONTENT, commentContent,
- Field.Store.NO, Field.Index.ANALYZED));
- // unstored
- doc.add(new Field(FieldConstants.C_EMAIL, commentEmail, Field.Store.NO,
- Field.Index.ANALYZED));
- // unstored
- doc.add(new Field(FieldConstants.C_NAME, commentName, Field.Store.NO,
- Field.Index.ANALYZED));
-
- // unstored
- doc.add(new Field(FieldConstants.CONSTANT, FieldConstants.CONSTANT_V,
- Field.Store.NO, Field.Index.ANALYZED));
-
- // index Category
- WeblogCategory categorydata = data.getCategory();
- Field category = (categorydata == null)
- // unstored
- ? new Field(FieldConstants.CATEGORY, "", Field.Store.NO,
- Field.Index.ANALYZED)
- // text
- : new Field(FieldConstants.CATEGORY, categorydata.getName(),
- Field.Store.YES, Field.Index.ANALYZED);
- doc.add(category);
-
- return doc;
- }
-
- /**
- * Begin writing.
- *
- * @return the index writer
- */
- protected IndexWriter beginWriting() {
- try {
-
- // Limit to 1000 tokens.
- LimitTokenCountAnalyzer analyzer = new LimitTokenCountAnalyzer(
- IndexManagerImpl.getAnalyzer(), 1000);
-
- IndexWriterConfig config = new IndexWriterConfig(
- FieldConstants.LUCENE_VERSION, analyzer);
-
- writer = new IndexWriter(manager.getIndexDirectory(), config);
-
- } catch (IOException e) {
- mLogger.error("ERROR creating writer", e);
- }
-
- return writer;
- }
-
- /**
- * End writing.
- */
- protected void endWriting() {
- if (writer != null) {
- try {
- writer.close();
- } catch (IOException e) {
- mLogger.error("ERROR closing writer", e);
- }
- }
- }
-
- /**
- * @see java.lang.Runnable#run()
- */
- public void run() {
- doRun();
- }
+ // ~ Instance fields
+ // ========================================================
+ protected IndexManagerImpl manager;
+ private IndexWriter writer;
+
+ // ~ Constructors
+ // ===========================================================
+ public IndexOperation(IndexManagerImpl manager) {
+ this.manager = manager;
+ }
+
+ // ~ Methods
+ // ================================================================
+ protected Document getDocument(WeblogEntry data) {
+
+ // Actual comment content is indexed only if search.index.comments
+ // is true or absent from the (static) configuration properties.
+ // If false in the configuration, comments are treated as if empty.
+ boolean indexComments = WebloggerConfig.getBooleanProperty(
+ "search.index.comments", true);
+
+ String commentContent = "";
+ String commentEmail = "";
+ String commentName = "";
+ if (indexComments) {
+ List comments = data.getComments();
+ if (comments != null) {
+ StringBuilder commentEmailBld = new StringBuilder();
+ StringBuilder commentContentBld = new StringBuilder();
+ StringBuilder commentNameBld = new StringBuilder();
+ for (Iterator cItr = comments.iterator(); cItr.hasNext();) {
+ WeblogEntryComment comment = (WeblogEntryComment) cItr
+ .next();
+ if (comment.getContent() != null) {
+ commentContentBld.append(comment.getContent());
+ commentContentBld.append(",");
+ }
+ if (comment.getEmail() != null) {
+ commentEmailBld.append(comment.getEmail());
+ commentEmailBld.append(",");
+ }
+ if (comment.getName() != null) {
+ commentNameBld.append(comment.getName());
+ commentNameBld.append(",");
+ }
+ }
+ commentEmail = commentEmailBld.toString();
+ commentContent = commentContentBld.toString();
+ commentName = commentNameBld.toString();
+ }
+ }
+
+ Document doc = new Document();
+
+ // keyword
+ doc.add(new Field(FieldConstants.ID, data.getId(), Field.Store.YES,
+ Field.Index.NOT_ANALYZED));
+
+ // keyword
+ doc.add(new Field(FieldConstants.WEBSITE_HANDLE, data.getWebsite()
+ .getHandle(), Field.Store.YES, Field.Index.NOT_ANALYZED));
+
+ // unindexed
+ doc.add(new Field(FieldConstants.ANCHOR, data.getAnchor(),
+ Field.Store.YES, Field.Index.NO));
+
+ // text
+ doc.add(new Field(FieldConstants.USERNAME, data.getCreator()
+ .getUserName(), Field.Store.YES, Field.Index.ANALYZED));
+
+ // text
+ doc.add(new Field(FieldConstants.TITLE, data.getTitle(),
+ Field.Store.YES, Field.Index.ANALYZED));
+
+ // index the entry text, but don't store it - moved to end of block
+ // unstored
+ doc.add(new Field(FieldConstants.CONTENT, data.getText(),
+ Field.Store.NO, Field.Index.ANALYZED));
+
+ // store an abbreviated version of the entry text, but don't index
+ // unindexed
+ doc.add(new Field(FieldConstants.CONTENT_STORED, Utilities
+ .truncateNicely(Utilities.removeHTML(data.getText()), 240, 260,
+ "..."), Field.Store.YES, Field.Index.NO));
+
+ // keyword
+ doc.add(new Field(FieldConstants.UPDATED, data.getUpdateTime()
+ .toString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
+
+ // keyword
+ doc.add(new Field(FieldConstants.PUBLISHED, data.getPubTime()
+ .toString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
+
+ // index Comments
+ // unstored
+ doc.add(new Field(FieldConstants.C_CONTENT, commentContent,
+ Field.Store.NO, Field.Index.ANALYZED));
+ // unstored
+ doc.add(new Field(FieldConstants.C_EMAIL, commentEmail, Field.Store.NO,
+ Field.Index.ANALYZED));
+ // unstored
+ doc.add(new Field(FieldConstants.C_NAME, commentName, Field.Store.NO,
+ Field.Index.ANALYZED));
+
+ // unstored
+ doc.add(new Field(FieldConstants.CONSTANT, FieldConstants.CONSTANT_V,
+ Field.Store.NO, Field.Index.ANALYZED));
+
+ // index Category
+ WeblogCategory categorydata = data.getCategory();
+ Field category = (categorydata == null)
+ // unstored
+ ? new Field(FieldConstants.CATEGORY, "", Field.Store.NO,
+ Field.Index.ANALYZED)
+ // text
+ : new Field(FieldConstants.CATEGORY, categorydata.getName(),
+ Field.Store.YES, Field.Index.ANALYZED);
+ doc.add(category);
+
+ return doc;
+ }
+
+ /**
+ * Begin writing.
+ *
+ * @return the index writer
+ */
+ protected IndexWriter beginWriting() {
+ try {
+
+ // Limit to 1000 tokens.
+ LimitTokenCountAnalyzer analyzer = new LimitTokenCountAnalyzer(
+ IndexManagerImpl.getAnalyzer(), 1000);
+
+ IndexWriterConfig config = new IndexWriterConfig(
+ FieldConstants.LUCENE_VERSION, analyzer);
+
+ writer = new IndexWriter(manager.getIndexDirectory(), config);
+
+ } catch (IOException e) {
+ mLogger.error("ERROR creating writer", e);
+ }
+
+ return writer;
+ }
+
+ /**
+ * End writing.
+ */
+ protected void endWriting() {
+ if (writer != null) {
+ try {
+ writer.close();
+ } catch (IOException e) {
+ mLogger.error("ERROR closing writer", e);
+ }
+ }
+ }
+
+ /**
+ * @see java.lang.Runnable#run()
+ */
+ public void run() {
+ doRun();
+ }
- protected abstract void doRun();
+ protected abstract void doRun();
}
Modified: roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/ReIndexEntryOperation.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/ReIndexEntryOperation.java?rev=1465341&r1=1465340&r2=1465341&view=diff
==============================================================================
--- roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/ReIndexEntryOperation.java (original)
+++ roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/ReIndexEntryOperation.java Sun Apr 7 08:09:27 2013
@@ -38,64 +38,64 @@ import org.apache.roller.weblogger.pojos
*/
public class ReIndexEntryOperation extends WriteToIndexOperation {
- // ~ Static fields/initializers
- // =============================================
+ // ~ Static fields/initializers
+ // =============================================
- private static Log mLogger = LogFactory.getFactory().getInstance(
- AddEntryOperation.class);
+ private static Log mLogger = LogFactory.getFactory().getInstance(
+ AddEntryOperation.class);
- // ~ Instance fields
- // ========================================================
+ // ~ Instance fields
+ // ========================================================
- private WeblogEntry data;
- private Weblogger roller;
-
- // ~ Constructors
- // ===========================================================
-
- /**
- * Adds a web log entry into the index.
- */
- public ReIndexEntryOperation(Weblogger roller, IndexManagerImpl mgr,
- WeblogEntry data) {
- super(mgr);
- this.roller = roller;
- this.data = data;
- }
-
- // ~ Methods
- // ================================================================
-
- public void doRun() {
-
- // since this operation can be run on a separate thread we must treat
- // the weblog object passed in as a detached object which is proned to
- // lazy initialization problems, so requery for the object now
- try {
- WeblogEntryManager wMgr = roller.getWeblogEntryManager();
- this.data = wMgr.getWeblogEntry(this.data.getId());
- } catch (WebloggerException ex) {
- mLogger.error("Error getting weblogentry object", ex);
- return;
- }
-
- IndexWriter writer = beginWriting();
- try {
- if (writer != null) {
-
- // Delete Doc
- Term term = new Term(FieldConstants.ID, data.getId());
- writer.deleteDocuments(term);
-
- // Add Doc
- writer.addDocument(getDocument(data));
- }
- } catch (IOException e) {
- mLogger.error("Problems adding/deleting doc to index", e);
- } finally {
- if (roller != null)
- roller.release();
- endWriting();
- }
- }
+ private WeblogEntry data;
+ private Weblogger roller;
+
+ // ~ Constructors
+ // ===========================================================
+
+ /**
+ * Adds a web log entry into the index.
+ */
+ public ReIndexEntryOperation(Weblogger roller, IndexManagerImpl mgr,
+ WeblogEntry data) {
+ super(mgr);
+ this.roller = roller;
+ this.data = data;
+ }
+
+ // ~ Methods
+ // ================================================================
+
+ public void doRun() {
+
+ // since this operation can be run on a separate thread we must treat
+ // the weblog object passed in as a detached object which is proned to
+ // lazy initialization problems, so requery for the object now
+ try {
+ WeblogEntryManager wMgr = roller.getWeblogEntryManager();
+ this.data = wMgr.getWeblogEntry(this.data.getId());
+ } catch (WebloggerException ex) {
+ mLogger.error("Error getting weblogentry object", ex);
+ return;
+ }
+
+ IndexWriter writer = beginWriting();
+ try {
+ if (writer != null) {
+
+ // Delete Doc
+ Term term = new Term(FieldConstants.ID, data.getId());
+ writer.deleteDocuments(term);
+
+ // Add Doc
+ writer.addDocument(getDocument(data));
+ }
+ } catch (IOException e) {
+ mLogger.error("Problems adding/deleting doc to index", e);
+ } finally {
+ if (roller != null)
+ roller.release();
+ endWriting();
+ }
+ }
}
Modified: roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/RebuildWebsiteIndexOperation.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/RebuildWebsiteIndexOperation.java?rev=1465341&r1=1465340&r2=1465341&view=diff
==============================================================================
--- roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/RebuildWebsiteIndexOperation.java (original)
+++ roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/RebuildWebsiteIndexOperation.java Sun Apr 7 08:09:27 2013
@@ -43,119 +43,119 @@ import org.apache.roller.weblogger.pojos
*/
public class RebuildWebsiteIndexOperation extends WriteToIndexOperation {
- // ~ Static fields/initializers
- // =============================================
+ // ~ Static fields/initializers
+ // =============================================
- private static Log mLogger = LogFactory.getFactory().getInstance(
- RebuildWebsiteIndexOperation.class);
+ private static Log mLogger = LogFactory.getFactory().getInstance(
+ RebuildWebsiteIndexOperation.class);
- // ~ Instance fields
- // ========================================================
+ // ~ Instance fields
+ // ========================================================
- private Weblog website;
- private Weblogger roller;
-
- // ~ Constructors
- // ===========================================================
-
- /**
- * Create a new operation that will recreate an index.
- *
- * @param website
- * The website to rebuild the index for, or null for all users.
- */
- public RebuildWebsiteIndexOperation(Weblogger roller, IndexManagerImpl mgr,
- Weblog website) {
- super(mgr);
- this.roller = roller;
- this.website = website;
- }
-
- // ~ Methods
- // ================================================================
-
- public void doRun() {
-
- Date start = new Date();
-
- // since this operation can be run on a separate thread we must treat
- // the weblog object passed in as a detached object which is proned to
- // lazy initialization problems, so requery for the object now
- if (this.website != null) {
- mLogger.debug("Reindexining weblog " + website.getHandle());
- try {
- this.website = roller.getWeblogManager().getWeblog(
- this.website.getId());
- } catch (WebloggerException ex) {
- mLogger.error("Error getting website object", ex);
- return;
- }
- } else {
- mLogger.debug("Reindexining entire site");
- }
-
- IndexWriter writer = beginWriting();
-
- try {
- if (writer != null) {
-
- // Delete Doc
- Term tWebsite = null;
- if (website != null) {
- tWebsite = IndexUtil.getTerm(FieldConstants.WEBSITE_HANDLE,
- website.getHandle());
- }
- if (tWebsite != null) {
- writer.deleteDocuments(tWebsite);
- } else {
- Term all = IndexUtil.getTerm(FieldConstants.CONSTANT,
- FieldConstants.CONSTANT_V);
- writer.deleteDocuments(all);
- }
-
- // Add Doc
- WeblogEntryManager weblogManager = roller
- .getWeblogEntryManager();
- List entries = weblogManager.getWeblogEntries(website, // website
- null, null, // startDate
- null, // endDate
- null, // catName
- null, WeblogEntry.PUBLISHED, // status
- null, // text
- null, // sortby (null means pubTime)
- null, null, 0, -1); // offset, length, locale
-
- mLogger.debug("Entries to index: " + entries.size());
-
- for (Iterator wbItr = entries.iterator(); wbItr.hasNext();) {
- WeblogEntry entry = (WeblogEntry) wbItr.next();
- writer.addDocument(getDocument(entry));
- mLogger.debug(MessageFormat.format(
- "Indexed entry {0}: {1}",
- new Object[] { entry.getPubTime(),
- entry.getAnchor() }));
- }
-
- // release the database connection
- roller.release();
- }
- } catch (Exception e) {
- mLogger.error("ERROR adding/deleting doc to index", e);
- } finally {
- endWriting();
- if (roller != null)
- roller.release();
- }
-
- Date end = new Date();
- double length = (end.getTime() - start.getTime()) / (double) 1000;
-
- if (website == null) {
- mLogger.info("Completed rebuilding index for all users in '"
- + length + "' secs");
- } else {
- mLogger.info("Completed rebuilding index for website handle: '"
- + website.getHandle() + "' in '" + length + "' seconds");
- }
- }
+ private Weblog website;
+ private Weblogger roller;
+
+ // ~ Constructors
+ // ===========================================================
+
+ /**
+ * Create a new operation that will recreate an index.
+ *
+ * @param website
+ * The website to rebuild the index for, or null for all users.
+ */
+ public RebuildWebsiteIndexOperation(Weblogger roller, IndexManagerImpl mgr,
+ Weblog website) {
+ super(mgr);
+ this.roller = roller;
+ this.website = website;
+ }
+
+ // ~ Methods
+ // ================================================================
+
+ public void doRun() {
+
+ Date start = new Date();
+
+ // since this operation can be run on a separate thread we must treat
+ // the weblog object passed in as a detached object which is proned to
+ // lazy initialization problems, so requery for the object now
+ if (this.website != null) {
+ mLogger.debug("Reindexining weblog " + website.getHandle());
+ try {
+ this.website = roller.getWeblogManager().getWeblog(
+ this.website.getId());
+ } catch (WebloggerException ex) {
+ mLogger.error("Error getting website object", ex);
+ return;
+ }
+ } else {
+ mLogger.debug("Reindexining entire site");
+ }
+
+ IndexWriter writer = beginWriting();
+
+ try {
+ if (writer != null) {
+
+ // Delete Doc
+ Term tWebsite = null;
+ if (website != null) {
+ tWebsite = IndexUtil.getTerm(FieldConstants.WEBSITE_HANDLE,
+ website.getHandle());
+ }
+ if (tWebsite != null) {
+ writer.deleteDocuments(tWebsite);
+ } else {
+ Term all = IndexUtil.getTerm(FieldConstants.CONSTANT,
+ FieldConstants.CONSTANT_V);
+ writer.deleteDocuments(all);
+ }
+
+ // Add Doc
+ WeblogEntryManager weblogManager = roller
+ .getWeblogEntryManager();
+ List entries = weblogManager.getWeblogEntries(website, // website
+ null, null, // startDate
+ null, // endDate
+ null, // catName
+ null, WeblogEntry.PUBLISHED, // status
+ null, // text
+ null, // sortby (null means pubTime)
+ null, null, 0, -1); // offset, length, locale
+
+ mLogger.debug("Entries to index: " + entries.size());
+
+ for (Iterator wbItr = entries.iterator(); wbItr.hasNext();) {
+ WeblogEntry entry = (WeblogEntry) wbItr.next();
+ writer.addDocument(getDocument(entry));
+ mLogger.debug(MessageFormat.format(
+ "Indexed entry {0}: {1}",
+ new Object[] { entry.getPubTime(),
+ entry.getAnchor() }));
+ }
+
+ // release the database connection
+ roller.release();
+ }
+ } catch (Exception e) {
+ mLogger.error("ERROR adding/deleting doc to index", e);
+ } finally {
+ endWriting();
+ if (roller != null)
+ roller.release();
+ }
+
+ Date end = new Date();
+ double length = (end.getTime() - start.getTime()) / (double) 1000;
+
+ if (website == null) {
+ mLogger.info("Completed rebuilding index for all users in '"
+ + length + "' secs");
+ } else {
+ mLogger.info("Completed rebuilding index for website handle: '"
+ + website.getHandle() + "' in '" + length + "' seconds");
+ }
+ }
}
Modified: roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/RemoveEntryOperation.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/RemoveEntryOperation.java?rev=1465341&r1=1465340&r2=1465341&view=diff
==============================================================================
--- roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/RemoveEntryOperation.java (original)
+++ roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/RemoveEntryOperation.java Sun Apr 7 08:09:27 2013
@@ -38,55 +38,55 @@ import org.apache.roller.weblogger.pojos
*/
public class RemoveEntryOperation extends WriteToIndexOperation {
- // ~ Static fields/initializers
- // =============================================
+ // ~ Static fields/initializers
+ // =============================================
- private static Log mLogger = LogFactory.getFactory().getInstance(
- RemoveEntryOperation.class);
+ private static Log mLogger = LogFactory.getFactory().getInstance(
+ RemoveEntryOperation.class);
- // ~ Instance fields
- // ========================================================
+ // ~ Instance fields
+ // ========================================================
- private WeblogEntry data;
- private Weblogger roller;
-
- // ~ Constructors
- // ===========================================================
-
- public RemoveEntryOperation(Weblogger roller, IndexManagerImpl mgr,
- WeblogEntry data) {
- super(mgr);
- this.roller = roller;
- this.data = data;
- }
-
- // ~ Methods
- // ================================================================
-
- public void doRun() {
-
- // since this operation can be run on a separate thread we must treat
- // the weblog object passed in as a detached object which is proned to
- // lazy initialization problems, so requery for the object now
- try {
- WeblogEntryManager wMgr = roller.getWeblogEntryManager();
- this.data = wMgr.getWeblogEntry(this.data.getId());
- } catch (WebloggerException ex) {
- mLogger.error("Error getting weblogentry object", ex);
- return;
- }
-
- IndexWriter writer = beginWriting();
- try {
- if (writer != null) {
- Term term = new Term(FieldConstants.ID, data.getId());
- writer.deleteDocuments(term);
- }
- } catch (IOException e) {
- mLogger.error("Error deleting doc from index", e);
- } finally {
- endWriting();
- }
- }
+ private WeblogEntry data;
+ private Weblogger roller;
+
+ // ~ Constructors
+ // ===========================================================
+
+ public RemoveEntryOperation(Weblogger roller, IndexManagerImpl mgr,
+ WeblogEntry data) {
+ super(mgr);
+ this.roller = roller;
+ this.data = data;
+ }
+
+ // ~ Methods
+ // ================================================================
+
+ public void doRun() {
+
+ // since this operation can be run on a separate thread we must treat
+ // the weblog object passed in as a detached object which is proned to
+ // lazy initialization problems, so requery for the object now
+ try {
+ WeblogEntryManager wMgr = roller.getWeblogEntryManager();
+ this.data = wMgr.getWeblogEntry(this.data.getId());
+ } catch (WebloggerException ex) {
+ mLogger.error("Error getting weblogentry object", ex);
+ return;
+ }
+
+ IndexWriter writer = beginWriting();
+ try {
+ if (writer != null) {
+ Term term = new Term(FieldConstants.ID, data.getId());
+ writer.deleteDocuments(term);
+ }
+ } catch (IOException e) {
+ mLogger.error("Error deleting doc from index", e);
+ } finally {
+ endWriting();
+ }
+ }
}
Modified: roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/RemoveWebsiteIndexOperation.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/RemoveWebsiteIndexOperation.java?rev=1465341&r1=1465340&r2=1465341&view=diff
==============================================================================
--- roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/RemoveWebsiteIndexOperation.java (original)
+++ roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/RemoveWebsiteIndexOperation.java Sun Apr 7 08:09:27 2013
@@ -39,77 +39,77 @@ import org.apache.roller.weblogger.pojos
*/
public class RemoveWebsiteIndexOperation extends WriteToIndexOperation {
- // ~ Static fields/initializers
- // =============================================
+ // ~ Static fields/initializers
+ // =============================================
- private static Log mLogger = LogFactory.getFactory().getInstance(
- RemoveWebsiteIndexOperation.class);
+ private static Log mLogger = LogFactory.getFactory().getInstance(
+ RemoveWebsiteIndexOperation.class);
- // ~ Instance fields
- // ========================================================
+ // ~ Instance fields
+ // ========================================================
- private Weblog website;
- private Weblogger roller;
-
- // ~ Constructors
- // ===========================================================
-
- /**
- * Create a new operation that will recreate an index.
- *
- * @param website
- * The website to rebuild the index for, or null for all sites.
- */
- public RemoveWebsiteIndexOperation(Weblogger roller, IndexManagerImpl mgr,
- Weblog website) {
- super(mgr);
- this.roller = roller;
- this.website = website;
- }
-
- // ~ Methods
- // ================================================================
-
- public void doRun() {
- Date start = new Date();
-
- // since this operation can be run on a separate thread we must treat
- // the weblog object passed in as a detached object which is proned to
- // lazy initialization problems, so requery for the object now
- try {
- this.website = roller.getWeblogManager().getWeblog(
- this.website.getId());
- } catch (WebloggerException ex) {
- mLogger.error("Error getting website object", ex);
- return;
- }
-
- IndexWriter writer = beginWriting();
- try {
- if (writer != null) {
- String handle = null;
- if (website != null) {
- handle = website.getHandle();
- }
- Term tHandle = IndexUtil.getTerm(FieldConstants.WEBSITE_HANDLE,
- handle);
-
- if (tHandle != null) {
- writer.deleteDocuments(tHandle);
- }
- }
- } catch (IOException e) {
- mLogger.info("Problems deleting doc from index", e);
- } finally {
- endWriting();
- }
-
- Date end = new Date();
- double length = (end.getTime() - start.getTime()) / (double) 1000;
-
- if (website != null) {
- mLogger.info("Completed deleting indices for website '"
- + website.getName() + "' in '" + length + "' seconds");
- }
- }
+ private Weblog website;
+ private Weblogger roller;
+
+ // ~ Constructors
+ // ===========================================================
+
+ /**
+ * Create a new operation that will recreate an index.
+ *
+ * @param website
+ * The website to rebuild the index for, or null for all sites.
+ */
+ public RemoveWebsiteIndexOperation(Weblogger roller, IndexManagerImpl mgr,
+ Weblog website) {
+ super(mgr);
+ this.roller = roller;
+ this.website = website;
+ }
+
+ // ~ Methods
+ // ================================================================
+
+ public void doRun() {
+ Date start = new Date();
+
+ // since this operation can be run on a separate thread we must treat
+ // the weblog object passed in as a detached object which is proned to
+ // lazy initialization problems, so requery for the object now
+ try {
+ this.website = roller.getWeblogManager().getWeblog(
+ this.website.getId());
+ } catch (WebloggerException ex) {
+ mLogger.error("Error getting website object", ex);
+ return;
+ }
+
+ IndexWriter writer = beginWriting();
+ try {
+ if (writer != null) {
+ String handle = null;
+ if (website != null) {
+ handle = website.getHandle();
+ }
+ Term tHandle = IndexUtil.getTerm(FieldConstants.WEBSITE_HANDLE,
+ handle);
+
+ if (tHandle != null) {
+ writer.deleteDocuments(tHandle);
+ }
+ }
+ } catch (IOException e) {
+ mLogger.info("Problems deleting doc from index", e);
+ } finally {
+ endWriting();
+ }
+
+ Date end = new Date();
+ double length = (end.getTime() - start.getTime()) / (double) 1000;
+
+ if (website != null) {
+ mLogger.info("Completed deleting indices for website '"
+ + website.getName() + "' in '" + length + "' seconds");
+ }
+ }
}
Modified: roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/SearchOperation.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/SearchOperation.java?rev=1465341&r1=1465340&r2=1465341&view=diff
==============================================================================
--- roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/SearchOperation.java (original)
+++ roller/trunk/weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/SearchOperation.java Sun Apr 7 08:09:27 2013
@@ -46,185 +46,185 @@ import org.apache.roller.weblogger.busin
*/
public class SearchOperation extends ReadFromIndexOperation {
- // ~ Static fields/initializers
- // =============================================
+ // ~ Static fields/initializers
+ // =============================================
- private static Log mLogger = LogFactory.getFactory().getInstance(
- SearchOperation.class);
+ private static Log mLogger = LogFactory.getFactory().getInstance(
+ SearchOperation.class);
- private static String[] SEARCH_FIELDS = new String[] {
- FieldConstants.CONTENT, FieldConstants.TITLE,
- FieldConstants.C_CONTENT, FieldConstants.CATEGORY };
-
- // private static BooleanClause.Occur[] SEARCH_FLAGS = new
- // BooleanClause.Occur[] {
- // BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD,
- // BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD };
-
- private static Sort SORTER = new Sort(new SortField(
- FieldConstants.PUBLISHED, SortField.STRING, true));
-
- // ~ Instance fields
- // ========================================================
-
- private IndexSearcher searcher;
- private TopFieldDocs searchresults;
-
- private String term;
- private String websiteHandle;
- private String category;
- private String parseError;
-
- private int nMax = 500; // Limit documents.
-
- // ~ Constructors
- // ===========================================================
-
- /**
- * Create a new operation that searches the index.
- */
- public SearchOperation(IndexManager mgr) {
- // TODO: finish moving IndexManager to backend, so this cast is not
- // needed
- super((IndexManagerImpl) mgr);
- }
-
- // ~ Methods
- // ================================================================
-
- public void setTerm(String term) {
- this.term = term;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see java.lang.Runnable#run()
- */
- public void doRun() {
- searchresults = null;
-
- searcher = null;
-
- try {
- IndexReader reader = manager.getSharedIndexReader();
- searcher = new IndexSearcher(reader);
-
- // Query query = MultiFieldQueryParser.parse(
- // FieldConstants.LUCENE_VERSION, term, SEARCH_FIELDS,
- // SEARCH_FLAGS, IndexManagerImpl.getAnalyzer());
-
- MultiFieldQueryParser multiParser = new MultiFieldQueryParser(
- FieldConstants.LUCENE_VERSION, SEARCH_FIELDS,
- IndexManagerImpl.getAnalyzer());
-
- // Make it an AND by default. Comment this out for an or (default)
- multiParser.setDefaultOperator(MultiFieldQueryParser.Operator.AND);
-
- // Create a query object out of our term
- Query query = multiParser.parse(term);
-
- Term tUsername = IndexUtil.getTerm(FieldConstants.WEBSITE_HANDLE,
- websiteHandle);
-
- if (tUsername != null) {
- BooleanQuery bQuery = new BooleanQuery();
- bQuery.add(query, BooleanClause.Occur.MUST);
- bQuery.add(new TermQuery(tUsername), BooleanClause.Occur.MUST);
- query = bQuery;
- }
-
- Term tCategory = IndexUtil.getTerm(FieldConstants.CATEGORY,
- category);
-
- if (tCategory != null) {
- BooleanQuery bQuery = new BooleanQuery();
- bQuery.add(query, BooleanClause.Occur.MUST);
- bQuery.add(new TermQuery(tCategory), BooleanClause.Occur.MUST);
- query = bQuery;
- }
-
- searchresults = searcher.search(query, null/* Filter */, nMax,
- SORTER);
-
- } catch (IOException e) {
- mLogger.error("Error searching index", e);
- parseError = e.getMessage();
-
- } catch (ParseException e) {
- // who cares?
- parseError = e.getMessage();
- }
- // don't need to close the reader, since we didn't do any writing!
- }
-
- /**
- * Gets the searcher.
- *
- * @return the searcher
- */
- public IndexSearcher getSearcher() {
- return searcher;
- }
-
- /**
- * Sets the searcher.
- *
- * @param searcher
- * the new searcher
- */
- public void setSearcher(IndexSearcher searcher) {
- this.searcher = searcher;
- }
-
- /**
- * Gets the results.
- *
- * @return the results
- */
- public TopFieldDocs getResults() {
- return searchresults;
- }
-
- /**
- * Gets the results count.
- *
- * @return the results count
- */
- public int getResultsCount() {
- if (searchresults == null)
- return -1;
-
- return searchresults.totalHits;
- }
-
- /**
- * Gets the parses the error.
- *
- * @return the parses the error
- */
- public String getParseError() {
- return parseError;
- }
-
- /**
- * Sets the website handle.
- *
- * @param websiteHandle
- * the new website handle
- */
- public void setWebsiteHandle(String websiteHandle) {
- this.websiteHandle = websiteHandle;
- }
-
- /**
- * Sets the category.
- *
- * @param category
- * the new category
- */
- public void setCategory(String category) {
- this.category = category;
- }
+ private static String[] SEARCH_FIELDS = new String[] {
+ FieldConstants.CONTENT, FieldConstants.TITLE,
+ FieldConstants.C_CONTENT, FieldConstants.CATEGORY };
+
+ // private static BooleanClause.Occur[] SEARCH_FLAGS = new
+ // BooleanClause.Occur[] {
+ // BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD,
+ // BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD };
+
+ private static Sort SORTER = new Sort(new SortField(
+ FieldConstants.PUBLISHED, SortField.STRING, true));
+
+ // ~ Instance fields
+ // ========================================================
+
+ private IndexSearcher searcher;
+ private TopFieldDocs searchresults;
+
+ private String term;
+ private String websiteHandle;
+ private String category;
+ private String parseError;
+
+ private int nMax = 500; // Limit documents.
+
+ // ~ Constructors
+ // ===========================================================
+
+ /**
+ * Create a new operation that searches the index.
+ */
+ public SearchOperation(IndexManager mgr) {
+ // TODO: finish moving IndexManager to backend, so this cast is not
+ // needed
+ super((IndexManagerImpl) mgr);
+ }
+
+ // ~ Methods
+ // ================================================================
+
+ public void setTerm(String term) {
+ this.term = term;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Runnable#run()
+ */
+ public void doRun() {
+ searchresults = null;
+
+ searcher = null;
+
+ try {
+ IndexReader reader = manager.getSharedIndexReader();
+ searcher = new IndexSearcher(reader);
+
+ // Query query = MultiFieldQueryParser.parse(
+ // FieldConstants.LUCENE_VERSION, term, SEARCH_FIELDS,
+ // SEARCH_FLAGS, IndexManagerImpl.getAnalyzer());
+
+ MultiFieldQueryParser multiParser = new MultiFieldQueryParser(
+ FieldConstants.LUCENE_VERSION, SEARCH_FIELDS,
+ IndexManagerImpl.getAnalyzer());
+
+ // Make it an AND by default. Comment this out for an or (default)
+ multiParser.setDefaultOperator(MultiFieldQueryParser.Operator.AND);
+
+ // Create a query object out of our term
+ Query query = multiParser.parse(term);
+
+ Term tUsername = IndexUtil.getTerm(FieldConstants.WEBSITE_HANDLE,
+ websiteHandle);
+
+ if (tUsername != null) {
+ BooleanQuery bQuery = new BooleanQuery();
+ bQuery.add(query, BooleanClause.Occur.MUST);
+ bQuery.add(new TermQuery(tUsername), BooleanClause.Occur.MUST);
+ query = bQuery;
+ }
+
+ Term tCategory = IndexUtil.getTerm(FieldConstants.CATEGORY,
+ category);
+
+ if (tCategory != null) {
+ BooleanQuery bQuery = new BooleanQuery();
+ bQuery.add(query, BooleanClause.Occur.MUST);
+ bQuery.add(new TermQuery(tCategory), BooleanClause.Occur.MUST);
+ query = bQuery;
+ }
+
+ searchresults = searcher.search(query, null/* Filter */, nMax,
+ SORTER);
+
+ } catch (IOException e) {
+ mLogger.error("Error searching index", e);
+ parseError = e.getMessage();
+
+ } catch (ParseException e) {
+ // who cares?
+ parseError = e.getMessage();
+ }
+ // don't need to close the reader, since we didn't do any writing!
+ }
+
+ /**
+ * Gets the searcher.
+ *
+ * @return the searcher
+ */
+ public IndexSearcher getSearcher() {
+ return searcher;
+ }
+
+ /**
+ * Sets the searcher.
+ *
+ * @param searcher
+ * the new searcher
+ */
+ public void setSearcher(IndexSearcher searcher) {
+ this.searcher = searcher;
+ }
+
+ /**
+ * Gets the results.
+ *
+ * @return the results
+ */
+ public TopFieldDocs getResults() {
+ return searchresults;
+ }
+
+ /**
+ * Gets the results count.
+ *
+ * @return the results count
+ */
+ public int getResultsCount() {
+ if (searchresults == null)
+ return -1;
+
+ return searchresults.totalHits;
+ }
+
+ /**
+ * Gets the parses the error.
+ *
+ * @return the parses the error
+ */
+ public String getParseError() {
+ return parseError;
+ }
+
+ /**
+ * Sets the website handle.
+ *
+ * @param websiteHandle
+ * the new website handle
+ */
+ public void setWebsiteHandle(String websiteHandle) {
+ this.websiteHandle = websiteHandle;
+ }
+
+ /**
+ * Sets the category.
+ *
+ * @param category
+ * the new category
+ */
+ public void setCategory(String category) {
+ this.category = category;
+ }
}