2013-07-24 52 views
0

喜我尝试运行此代码,我似乎可以弄清楚什么是wrong..sorry进出口新的solrj有此错误solrj错误:数组越界

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 
at SolrjTest.main(SolrjTest.java:98) 

import org.apache.solr.common.SolrDocument; 
import java.util.Map; 
import org.apache.solr.common.SolrDocumentList; 
import org.apache.solr.common.SolrDocument; 
import java.util.Map; 
import java.util.Iterator; 
import java.util.List; 
import java.util.ArrayList; 
import java.util.HashMap; 

import org.apache.solr.client.solrj.SolrServer; 
import org.apache.solr.client.solrj.SolrServerException; 
import org.apache.solr.client.solrj.SolrQuery; 
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer; 
import org.apache.solr.client.solrj.impl.HttpSolrServer; 
import org.apache.solr.client.solrj.response.QueryResponse; 
import org.apache.solr.client.solrj.response.FacetField; 


public class SolrjTest 
{ 
    public void query(String q) 
    { 
     //CommonsHttpSolrServer server = null; 
     SolrServer server = null; 

     try 
     { 
      server = new HttpSolrServer("http://localhost:8983/solr/"); 
      //server = new CommonsHttpSolrServer("http://localhost:8080/solr/"); 
      System.out.println("connected"); 
     } 
     catch(Exception e) 
     { 
      System.out.println("not connected"); 
      e.printStackTrace(); 
     } 

     SolrQuery query = new SolrQuery(); 
     query.setQuery(q); 
     query.setQueryType("camera"); 
     query.setFacet(true); 
     query.addFacetField("name"); 
     query.addFacetField("locality4"); 
     query.setFacetMinCount(2); 
     query.setIncludeScore(true); 

     try 
     { 
      QueryResponse qr = server.query(query); 

      SolrDocumentList sdl = qr.getResults(); 

      System.out.println("Found: " + sdl.getNumFound()); 
      System.out.println("Start: " + sdl.getStart()); 
      System.out.println("Max Score: " + sdl.getMaxScore()); 
      System.out.println("--------------------------------"); 

      ArrayList<HashMap<String, Object>> hitsOnPage = new ArrayList<HashMap<String, Object>>(); 

      for(SolrDocument d : sdl) 
      { 
       HashMap<String, Object> values = new HashMap<String, Object>(); 

       for(Iterator<Map.Entry<String, Object>> i = d.iterator(); i.hasNext();  ) 
       { 
        Map.Entry<String, Object> e2 = i.next(); 

        values.put(e2.getKey(), e2.getValue()); 
       } 

       hitsOnPage.add(values); 
       System.out.println(values.get("displayname") + " (" + values.get("displayphone") + ")"); 
      } 

      List<FacetField> facets = qr.getFacetFields(); 

      for(FacetField facet : facets) 
      { 
       List<FacetField.Count> facetEntries = facet.getValues(); 

       for(FacetField.Count fcount : facetEntries) 
       { 
        System.out.println(fcount.getName() + ": " + fcount.getCount()); 
       } 
      } 
     } 
     catch (SolrServerException e) 
     { 
      e.printStackTrace(); 
     } 

    } 

    public static void main(String[] args) 
    { 
     SolrjTest solrj = new SolrjTest(); 
     solrj.query(args[0]); 

    } 
} 

IM的

和它指向在:

solrj.query(args[0]); 

我也有每当我运行SA具有该输出即时通讯之前的附加问题原因在solrj的多个程序

{time=218.0,sub1={time=125.0,sub1.1={time=31.0}}} 

你能告诉我这是什么意思和数组越界的错误?在此先感谢真的需要这一点,并不知道太多关于solrj

回答

0

原因是你没有提供任何运行时参数,而程序执行开始。

solrj.query(args[0]);args是指传递给程序,如参数:

java MyClass abc def 

所以这里在上述情况下args将是:

args[0] -----> "abc" 
args[1] -----> "def" 

因此,请确保您传递正确的参数同时执行你的程序。

+0

这是否意味着我可以将args [0]替换为“abc”或任何字符串? –

+0

是的,你可以,但请记住,无论你设置它将传递给你的“查询”方法。 – Abubakkar

+0

嗨我的程序现在运行,我还添加了commons-logging jar文件并按照你的建议非常感谢你! –