[jboss-user] [Beginners Corner] - Portlet using lucene gives ArrayIndexOutOfBoundsException

francsi do-not-reply at jboss.com
Fri Dec 8 07:23:37 EST 2006


Hello!

I've buld a Portlet using the apache lucene API to search our website.

Indexing will be performed as a job in java (works fine).

My portlet is using the following method to do a simple search:


  | private static List sucheSchlagwort(String queries)throws Exception{
  | 		  String index = "index";
  | 		  String field = "contents";
  | 		  
  | 		  int repeat = 0;
  | 		  boolean raw = false;
  | 		  String normsField = null;
  | 		  //
  | 		  //
  | 		  IndexReader reader = IndexReader.open(index);
  | 		  if (normsField != null)
  | 		      reader = new OneNormsReader(reader, normsField);
  | 
  | 		  Searcher searcher = new IndexSearcher(reader);
  | 		  Analyzer analyzer = new StandardAnalyzer();
  | 		  BufferedReader in = null;
  | 		//  in = new BufferedReader(new FileReader(queries));
  | 		  QueryParser parser = new QueryParser(field, analyzer);
  | 		  List alleErgebnisse = new ArrayList();
  | 		  
  | 			  String line = queries;   // in.readLine();
  | 			 
  | 			  Query query = parser.parse(line);
  | 		     
  | 
  | 		      Hits hits = searcher.search(query);
  | 		      
  | 		      
  | 		      // ANFANG
  | 		      // FIXME: Ausgabe ins Ausgabeportlet, nicht println
  | 		      for (int i = 0; i < hits.length(); i++) {
  | 		    	    Ergebnis ergebnis = new Ergebnis();
  | 		            Document doc = hits.doc(i);
  | 		            String path = doc.get("path");
  | 		            if (path != null) {
  | 		              ergebnis.setLink(doc.get("path"));
  | 		              System.out.println(doc.get("path"));
  | 		              String title = doc.get("title");
  | 		              if (title != null) {
  | 		                ergebnis.setTitel(doc.get("title"));
  | 		                System.out.println(doc.get("title"));
  | 		              }
  | 		            } else {
  | 		              ergebnis.setLink("Kein Link zu diesem Dokument vorhanden");
  | 		            }
  | 		            alleErgebnisse.add(ergebnis);
  | 		          
  | 
  | 		          if (queries != null)                      // non-interactive
  | 		            break;
  | 		        }
  | 		      // ENDE
  | 		  	
  | 		  reader.close();
  | 	      return alleErgebnisse;
  | 		  
  | 	  }
  | 

Implementet into a simple java class it works fine on shell. Started as part of my portlet, it sends me the following error:


  | 2006-12-08 12:34:42,393 ERROR [STDERR] java.lang.ArrayIndexOutOfBoundsException: -1
  | 2006-12-08 12:34:42,393 ERROR [STDERR] 	at java.util.ArrayList.get(ArrayList.java:323)
  | .
  | .
  | .
  | 2006-12-08 12:34:42,413 ERROR [STDERR] 	at org.apache.lucene.index.IndexReader.open(IndexReader.java:95)
  | 2006-12-08 12:34:42,413 ERROR [STDERR] 	at SuchportletPortlet.sucheSchlagwort(SuchportletPortlet.java:54)
  | .
  | .
  | .
  | 

Looks like it comes from here:

  | IndexReader reader = IndexReader.open(index);
  | 

Changing the index to a non existing path sends an error that the path is not existing. So there must be a problem with reading the index. Don't you think?
What about the read/write permissions under the JBOSS directory?
And remember... in a standard java program it works...

Greetings,
Jan

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3992226#3992226

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3992226



More information about the jboss-user mailing list