2013-07-24 12 views
0

안녕하세요 메신저가이 코드를 실행하려고하고 내가solrj 오류 :

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]); 

    } 
} 

메신저이 오류

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 
at SolrjTest.main(SolrjTest.java:98) 
을 가진 solrj하는 새로운 메신저 wrong..sorry 무엇인지 알아낼 수있는 범위의 밖으로 배열

그것은에서 가리키는 :

solrj.query(args[0]); 

는 나 또한 내가 사를 실행할 때마다이 출력을 가진 메신저 전에 추가 질문 원인이 solrj

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

에서 mple 프로그램이 의미 및 범위의 밖으로 배열에 대한 오류가 무엇인지 말해 줄 수? 미리 감사드립니다. 솔직히 많은 것을 알고 있습니다.

답변

0

이유는 프로그램 실행이 시작되는 동안 런타임 매개 변수를 제공하지 않기 때문입니다. solrj.query(args[0]);에서

args이 같은 프로그램에 전달 된 매개 변수를 의미 : 그래서 여기에 위의 경우에

java MyClass abc def 

args이 될 것입니다 :

그래서
args[0] -----> "abc" 
args[1] -----> "def" 

있는지 확인 당신은 적절한 매개 변수를 전달하는 귀하의 프로그램을 실행하는 동안.

+0

이렇게하면 args [0]을 "abc"또는 다른 문자열로 대체 할 수 있습니까? –

+0

네가 할 수는 있지만, 무엇을 설정해도'query' 메소드로 전달된다는 것을 명심하십시오. – Abubakkar

+0

안녕 내 프로그램이 이제 실행됩니다, 나는 또한 commons-logging jar 파일을 추가하고 조언을 따랐습니다. –