Author: natalia
Date: Mon Nov 3 13:35:52 2008
New Revision: 710170
URL: http://svn.apache.org/viewvc?rev=710170&view=rev
Log:
Updated Lucene to version 2.4.0
Added:
xml/xindice/trunk/lib/lucene-core-2.4.0.jar (with props)
Removed:
xml/xindice/trunk/lib/lucene-core-2.3.2.jar
Modified:
xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/LuceneIndexer.java
xml/xindice/trunk/java/src/org/apache/xindice/core/query/ftsearch/NodeReader.java
xml/xindice/trunk/java/src/org/apache/xindice/core/query/ftsearch/Searcher.java
xml/xindice/trunk/java/src/org/apache/xindice/core/query/ftsearch/SpecialQueryParser.java
Modified:
xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/LuceneIndexer.java
URL:
http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/LuceneIndexer.java?rev=710170&r1=710169&r2=710170&view=diff
==============================================================================
---
xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/LuceneIndexer.java
(original)
+++
xml/xindice/trunk/java/src/org/apache/xindice/core/indexer/LuceneIndexer.java
Mon Nov 3 13:35:52 2008
@@ -21,35 +21,33 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.xindice.core.Collection;
-import org.apache.xindice.core.DBObject;
-import org.apache.xindice.core.DBException;
-import org.apache.xindice.core.data.Key;
-import org.apache.xindice.core.FaultCodes;
-import org.apache.xindice.core.query.CompilationException;
-import org.apache.xindice.core.query.ProcessingException;
-import org.apache.xindice.util.Configuration;
-import org.apache.xindice.util.XindiceException;
-import org.apache.xindice.util.StringUtilities;
-
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
-import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.queryParser.ParseException;
+import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
-import org.apache.lucene.search.Hit;
+import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
-import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.queryParser.ParseException;
+import org.apache.lucene.search.TopDocs;
+import org.apache.xindice.core.Collection;
+import org.apache.xindice.core.DBException;
+import org.apache.xindice.core.DBObject;
+import org.apache.xindice.core.FaultCodes;
+import org.apache.xindice.core.data.Key;
+import org.apache.xindice.core.query.CompilationException;
+import org.apache.xindice.core.query.ProcessingException;
+import org.apache.xindice.util.Configuration;
+import org.apache.xindice.util.StringUtilities;
+import org.apache.xindice.util.XindiceException;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
-import java.util.ArrayList;
/**
* LuceneIndexer is used for maintaining full text indexes. It operates on
@@ -94,7 +92,6 @@
// Default analyzer to use
public static final String DEFANALYZER =
"org.apache.lucene.analysis.SimpleAnalyzer";
- private static final IndexMatch[] EMPTY_MATCHES = new IndexMatch[0];
private File idxFile;
private IndexWriter iw;
@@ -330,7 +327,7 @@
try {
if (iw == null) {
- iw = new IndexWriter(getFile(), getAnalyzer(), create);
+ iw = new IndexWriter(getFile(), getAnalyzer(), create,
IndexWriter.MaxFieldLength.UNLIMITED);
}
} catch (IOException e) {
if (create) {
@@ -377,9 +374,9 @@
try {
assertOpen();
if (iw != null) {
- iw.flush();
+ iw.commit();
- int nDocs = iw.docCount();
+ int nDocs = iw.maxDoc();
/* Fairly arbitrary rules for triggering index optimisation.
Need to
* play with these.
*/
@@ -446,11 +443,11 @@
public void onValueAdded(IndexPattern pattern, String value, Key
key, int pos, int len, short elemID, short attrID) {
if (doc == null) {
doc = new Document();
- doc.add(new Field(KEYNAME, key.toString(),
Field.Store.YES, Field.Index.UN_TOKENIZED));
+ doc.add(new Field(KEYNAME, key.toString(),
Field.Store.YES, Field.Index.NOT_ANALYZED));
}
String field = (String) patterns.get(pattern);
- doc.add(new Field(field, value, Field.Store.NO,
Field.Index.TOKENIZED, Field.TermVector.YES));
+ doc.add(new Field(field, value, Field.Store.NO,
Field.Index.ANALYZED, Field.TermVector.YES));
}
};
}
@@ -478,15 +475,17 @@
* @throws DBException if IOException prevented indexer from executing the
query.
*/
public IndexMatch[] queryMatches(Query query) throws DBException {
- ArrayList matches = new ArrayList();
+ IndexMatch[] matches = null;
Searcher searcher = getSearcher();
try {
- Hits hits = searcher.search(query);
- for (Iterator i = hits.iterator(); i.hasNext(); ) {
- Hit hit = (Hit) i.next();
- Key key = new
Key(hit.getDocument().getField(KEYNAME).stringValue());
- matches.add(new IndexMatch(key, -1, -1));
+ TopDocs docs = searcher.is.search(query, searcher.ir.numDocs());
+ matches = new IndexMatch[docs.scoreDocs.length];
+
+ for (int i = 0; i < docs.scoreDocs.length; i++) {
+ int doc = docs.scoreDocs[i].doc;
+ Key key = new
Key(searcher.ir.document(doc).getField(KEYNAME).stringValue());
+ matches[i] = new IndexMatch(key, -1, -1);
}
} catch (IOException e) {
throw new ProcessingException("Failed to process a query", e);
@@ -494,7 +493,7 @@
searcher.free();
}
- return (IndexMatch[]) matches.toArray(EMPTY_MATCHES);
+ return matches;
}
/**
@@ -504,7 +503,7 @@
* return Searcher instance it created previously.
*
* @return current Searcher
- * @throws DBException
+ * @throws DBException If index could not be accessed
*/
private synchronized Searcher getSearcher() throws DBException {
@@ -590,6 +589,13 @@
}
}
+ /**
+ * Internal search method.
+ * @param query Search query
+ * @return Hits for the search
+ * @throws DBException Index could not be accessed
+ * @deprecated Deprecated following Lucene changes
+ */
public Hits search(Query query) throws DBException {
try {
return is.search(query);
Modified:
xml/xindice/trunk/java/src/org/apache/xindice/core/query/ftsearch/NodeReader.java
URL:
http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/query/ftsearch/NodeReader.java?rev=710170&r1=710169&r2=710170&view=diff
==============================================================================
---
xml/xindice/trunk/java/src/org/apache/xindice/core/query/ftsearch/NodeReader.java
(original)
+++
xml/xindice/trunk/java/src/org/apache/xindice/core/query/ftsearch/NodeReader.java
Mon Nov 3 13:35:52 2008
@@ -80,9 +80,10 @@
TokenStream stream = analyzer.tokenStream("", new
StringReader(text));
try {
+ Token reusableToken = new Token();
Token token;
- while ((token = stream.next()) != null) {
- nodes[i].add(new String(token.termBuffer(), 0,
token.termLength()));
+ while ((token = stream.next(reusableToken)) != null) {
+ nodes[i].add(token.term());
}
} catch (IOException e) {
// won't happen
Modified:
xml/xindice/trunk/java/src/org/apache/xindice/core/query/ftsearch/Searcher.java
URL:
http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/query/ftsearch/Searcher.java?rev=710170&r1=710169&r2=710170&view=diff
==============================================================================
---
xml/xindice/trunk/java/src/org/apache/xindice/core/query/ftsearch/Searcher.java
(original)
+++
xml/xindice/trunk/java/src/org/apache/xindice/core/query/ftsearch/Searcher.java
Mon Nov 3 13:35:52 2008
@@ -19,14 +19,14 @@
package org.apache.xindice.core.query.ftsearch;
-import org.w3c.dom.NodeList;
import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.queryParser.ParseException;
+import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.IndexSearcher;
-import org.apache.lucene.search.Hits;
import org.apache.lucene.search.Query;
+import org.apache.lucene.search.TopDocs;
import org.apache.xindice.core.data.NodeSet;
+import org.w3c.dom.NodeList;
import java.io.IOException;
@@ -69,36 +69,31 @@
Query compQuery = new QueryParser("", analyzer).parse(query);
NodeReader reader = new NodeReader(nodes, analyzer);
IndexSearcher searcher = new IndexSearcher(reader);
- Hits hits = null;
+
+ TopDocs docs = null;
try {
- hits = searcher.search(compQuery);
+ docs = searcher.search(compQuery, reader.numDocs());
} catch (IOException e) {
// this searcher does not use file IO, exception won't happen
}
- return new ResultSet(hits);
+ return new ResultSet(docs);
}
private class ResultSet implements NodeSet {
- private Hits hits;
+ private TopDocs docs;
private int count;
- private ResultSet(Hits hits) {
- this.hits = hits;
+ private ResultSet(TopDocs docs) {
+ this.docs = docs;
}
public boolean hasMoreNodes() {
- return count < hits.length();
+ return count < docs.scoreDocs.length;
}
public Object getNextNode() {
- try {
- return nodes.item(hits.id(count++));
- } catch (IOException e) {
- // ignore, does not use IO
- }
-
- return null;
+ return nodes.item(docs.scoreDocs[count++].doc);
}
}
}
Modified:
xml/xindice/trunk/java/src/org/apache/xindice/core/query/ftsearch/SpecialQueryParser.java
URL:
http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/query/ftsearch/SpecialQueryParser.java?rev=710170&r1=710169&r2=710170&view=diff
==============================================================================
---
xml/xindice/trunk/java/src/org/apache/xindice/core/query/ftsearch/SpecialQueryParser.java
(original)
+++
xml/xindice/trunk/java/src/org/apache/xindice/core/query/ftsearch/SpecialQueryParser.java
Mon Nov 3 13:35:52 2008
@@ -19,14 +19,14 @@
package org.apache.xindice.core.query.ftsearch;
-import org.apache.lucene.queryParser.QueryParser;
+import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.queryParser.CharStream;
+import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.queryParser.QueryParserTokenManager;
-import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.search.Query;
import org.apache.lucene.search.BooleanClause;
+import org.apache.lucene.search.Query;
-import java.util.Vector;
+import java.util.List;
/**
* Specialized parser for text queries that ignores query clauses that have
@@ -59,12 +59,12 @@
* boolean clauses that have 'prohibited' modifier.
* @see QueryParser#addClause(java.util.Vector, int, int,
org.apache.lucene.search.Query)
*/
- protected void addClause(Vector clauses, int conj, int mods, Query q) {
+ protected void addClause(List clauses, int conj, int mods, Query q) {
// If this term is introduced by AND, make the preceding term required,
// unless it's already prohibited
if (clauses.size() > 0 && conj == CONJ_AND) {
- BooleanClause c = (BooleanClause)
clauses.elementAt(clauses.size()-1);
+ BooleanClause c = (BooleanClause) clauses.get(clauses.size()-1);
if (!c.isProhibited())
c.setOccur(BooleanClause.Occur.MUST);
}
@@ -74,7 +74,7 @@
// unless it's prohibited (that means we leave -a OR b but +a OR
b-->a OR b)
// notice if the input is a OR b, first term is parsed as
required; without
// this modification a OR b would parsed as +a OR b
- BooleanClause c = (BooleanClause)
clauses.elementAt(clauses.size()-1);
+ BooleanClause c = (BooleanClause) clauses.get(clauses.size()-1);
if (!c.isProhibited())
c.setOccur(BooleanClause.Occur.SHOULD);
}
@@ -100,9 +100,9 @@
required = (!prohibited && conj != CONJ_OR);
}
if (required && !prohibited) {
- clauses.addElement(new BooleanClause(q, BooleanClause.Occur.MUST));
+ clauses.add(new BooleanClause(q, BooleanClause.Occur.MUST));
} else if (!required && !prohibited) {
- clauses.addElement(new BooleanClause(q,
BooleanClause.Occur.SHOULD));
+ clauses.add(new BooleanClause(q, BooleanClause.Occur.SHOULD));
} else if (required && prohibited) {
throw new RuntimeException("Clause cannot be both required and
prohibited");
}
Added: xml/xindice/trunk/lib/lucene-core-2.4.0.jar
URL:
http://svn.apache.org/viewvc/xml/xindice/trunk/lib/lucene-core-2.4.0.jar?rev=710170&view=auto
==============================================================================
Binary file - no diff available.
Propchange: xml/xindice/trunk/lib/lucene-core-2.4.0.jar
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream