You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2008/03/10 14:34:37 UTC
svn commit: r635552 - in
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene:
AbstractIndex.java MultiIndex.java PersistentIndex.java SearchIndex.java
VolatileIndex.java
Author: mreutegg
Date: Mon Mar 10 06:34:27 2008
New Revision: 635552
URL: http://svn.apache.org/viewvc?rev=635552&view=rev
Log:
JCR-1465: Configurable Similarity
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PersistentIndex.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/VolatileIndex.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java?rev=635552&r1=635551&r2=635552&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/AbstractIndex.java Mon Mar 10 06:34:27 2008
@@ -23,6 +23,7 @@
import org.apache.lucene.store.Directory;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
+import org.apache.lucene.search.Similarity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -70,6 +71,9 @@
/** Analyzer we use to tokenize text */
private Analyzer analyzer;
+ /** The similarity in use for indexing and searching. */
+ private final Similarity similarity;
+
/** Compound file flag */
private boolean useCompoundFile = true;
@@ -108,6 +112,7 @@
* <code>directory</code>.
*
* @param analyzer the analyzer for text tokenizing.
+ * @param similarity the similarity implementation.
* @param directory the underlying directory.
* @param cache the document number cache if this index should use
* one; otherwise <code>cache</code> is
@@ -116,10 +121,12 @@
* @throws IOException if the index cannot be initialized.
*/
AbstractIndex(Analyzer analyzer,
+ Similarity similarity,
Directory directory,
DocNumberCache cache,
IndexingQueue indexingQueue) throws IOException {
this.analyzer = analyzer;
+ this.similarity = similarity;
this.directory = directory;
this.cache = cache;
this.indexingQueue = indexingQueue;
@@ -291,6 +298,7 @@
}
if (indexWriter == null) {
indexWriter = new IndexWriter(getDirectory(), analyzer);
+ indexWriter.setSimilarity(similarity);
// since lucene 2.0 setMaxBuffereDocs is equivalent to previous minMergeDocs attribute
indexWriter.setMaxBufferedDocs(minMergeDocs);
indexWriter.setMaxMergeDocs(maxMergeDocs);
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java?rev=635552&r1=635551&r2=635552&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/MultiIndex.java Mon Mar 10 06:34:27 2008
@@ -275,9 +275,9 @@
// move on to next index
continue;
}
- PersistentIndex index = new PersistentIndex(
- indexNames.getName(i), sub,
- handler.getTextAnalyzer(), cache, indexingQueue);
+ PersistentIndex index = new PersistentIndex(indexNames.getName(i),
+ sub, handler.getTextAnalyzer(), handler.getSimilarity(),
+ cache, indexingQueue);
index.setMaxMergeDocs(handler.getMaxMergeDocs());
index.setMergeFactor(handler.getMergeFactor());
index.setMinMergeDocs(handler.getMinMergeDocs());
@@ -581,7 +581,8 @@
sub = new File(indexDir, indexName);
}
PersistentIndex index = new PersistentIndex(indexName, sub,
- handler.getTextAnalyzer(), cache, indexingQueue);
+ handler.getTextAnalyzer(), handler.getSimilarity(),
+ cache, indexingQueue);
index.setMaxMergeDocs(handler.getMaxMergeDocs());
index.setMergeFactor(handler.getMergeFactor());
index.setMinMergeDocs(handler.getMinMergeDocs());
@@ -908,8 +909,8 @@
* Resets the volatile index to a new instance.
*/
private void resetVolatileIndex() throws IOException {
- volatileIndex = new VolatileIndex(
- handler.getTextAnalyzer(), indexingQueue);
+ volatileIndex = new VolatileIndex(handler.getTextAnalyzer(),
+ handler.getSimilarity(), indexingQueue);
volatileIndex.setUseCompoundFile(handler.getUseCompoundFile());
volatileIndex.setMaxFieldLength(handler.getMaxFieldLength());
volatileIndex.setBufferSize(handler.getBufferSize());
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PersistentIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PersistentIndex.java?rev=635552&r1=635551&r2=635552&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PersistentIndex.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PersistentIndex.java Mon Mar 10 06:34:27 2008
@@ -24,6 +24,7 @@
import org.apache.lucene.store.IndexOutput;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.NativeFSLockFactory;
+import org.apache.lucene.search.Similarity;
import java.io.IOException;
import java.io.File;
@@ -49,6 +50,7 @@
* @param name the name of this index.
* @param indexDir the directory to store the index.
* @param analyzer the analyzer for text tokenizing.
+ * @param similarity the similarity implementation.
* @param cache the document number cache
* @param indexingQueue the indexing queue.
* @throws IOException if an error occurs while opening / creating the
@@ -56,11 +58,11 @@
* @throws IOException if an error occurs while opening / creating
* the index.
*/
- PersistentIndex(String name, File indexDir,
- Analyzer analyzer, DocNumberCache cache,
+ PersistentIndex(String name, File indexDir, Analyzer analyzer,
+ Similarity similarity, DocNumberCache cache,
IndexingQueue indexingQueue)
throws IOException {
- super(analyzer, FSDirectory.getDirectory(indexDir, new NativeFSLockFactory(indexDir)),
+ super(analyzer, similarity, FSDirectory.getDirectory(indexDir, new NativeFSLockFactory(indexDir)),
cache, indexingQueue);
this.name = name;
}
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java?rev=635552&r1=635551&r2=635552&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java Mon Mar 10 06:34:27 2008
@@ -49,6 +49,7 @@
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
+import org.apache.lucene.search.Similarity;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.commons.collections.iterators.AbstractIteratorDecorator;
@@ -362,6 +363,11 @@
private SpellChecker spellChecker;
/**
+ * The similarity in use for indexing and searching.
+ */
+ private Similarity similarity = Similarity.getDefault();
+
+ /**
* Indicates if this <code>SearchIndex</code> is closed and cannot be used
* anymore.
*/
@@ -655,8 +661,9 @@
Sort sort = new Sort(createSortFields(orderProps, orderSpecs));
final IndexReader reader = getIndexReader(queryImpl.needsSystemTree());
- return new FilterMultiColumnQueryHits(new JackrabbitIndexSearcher(
- session, reader).execute(query, sort)) {
+ JackrabbitIndexSearcher searcher = new JackrabbitIndexSearcher(session, reader);
+ searcher.setSimilarity(getSimilarity());
+ return new FilterMultiColumnQueryHits(searcher.execute(query, sort)) {
public void close() throws IOException {
try {
super.close();
@@ -749,6 +756,13 @@
}
/**
+ * @return the similarity, which should be used for indexing and searching.
+ */
+ public Similarity getSimilarity() {
+ return similarity;
+ }
+
+ /**
* Returns an index reader for this search index. The caller of this method
* is responsible for closing the index reader when he is finished using
* it.
@@ -1783,6 +1797,28 @@
*/
public String getSynonymProviderConfigPath() {
return synonymProviderConfigPath;
+ }
+
+ /**
+ * Sets the similarity implementation, which will be used for indexing and
+ * searching. The implementation must extend {@link Similarity}.
+ *
+ * @param className a {@link Similarity} implementation.
+ */
+ public void setSimilarityClass(String className) {
+ try {
+ Class similarityClass = Class.forName(className);
+ similarity = (Similarity) similarityClass.newInstance();
+ } catch (Exception e) {
+ log.warn("Invalid Similarity class: " + className, e);
+ }
+ }
+
+ /**
+ * @return the name of the similarity class.
+ */
+ public String getSimilarityClass() {
+ return similarity.getClass().getName();
}
//----------------------------< internal >----------------------------------
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/VolatileIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/VolatileIndex.java?rev=635552&r1=635551&r2=635552&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/VolatileIndex.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/VolatileIndex.java Mon Mar 10 06:34:27 2008
@@ -19,12 +19,11 @@
import org.apache.commons.collections.map.LinkedMap;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
-import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.Term;
import org.apache.lucene.store.RAMDirectory;
+import org.apache.lucene.search.Similarity;
import java.io.IOException;
-import java.util.Iterator;
import java.util.Map;
/**
@@ -56,11 +55,14 @@
* Creates a new <code>VolatileIndex</code> using an <code>analyzer</code>.
*
* @param analyzer the analyzer to use.
+ * @param similarity the similarity implementation.
* @param indexingQueue the indexing queue.
* @throws IOException if an error occurs while opening the index.
*/
- VolatileIndex(Analyzer analyzer, IndexingQueue indexingQueue) throws IOException {
- super(analyzer, new RAMDirectory(), null, indexingQueue);
+ VolatileIndex(Analyzer analyzer,
+ Similarity similarity,
+ IndexingQueue indexingQueue) throws IOException {
+ super(analyzer, similarity, new RAMDirectory(), null, indexingQueue);
}
/**