2016-04-25 3 views
0

Ich verwende SolrJ zusammen mit Json facet API, um Facetten zu erhalten. Mein SolrJ Query Response Objekt enthielt jedoch nur Dokumente, keine Facetten. Meine Facette ist eine verschachtelte Struktur. Unterstützt SolrJ derzeit JSON-Facetten oder muss ich selbst analysieren?Abrufen der JSON-Facette mit SolrJ

Darüber hinaus enthalten die Facetten auf untergeordneten Objekten nur Zählwerte, keine Werte. Wie bekomme ich die Facettenbegriffe, wie Frankreich, Italien für das folgende Beispiel?

facets={ 
    count=57477, 
    apparels={ 
     buckets= 
     { 
      val=Chanel, 
      count=6, 
      madeIn={ 
       count=6 
      } 
     } 
    } 
} 

Antwort

0

Sie müssen Ihr Facettenergebnis analysieren, da es nicht zu offensichtlich ist, es zu parsen. Sie können response.getResponse().get("facets"); verwenden oder Sie können den Server direkt anfordern und das Ergebnis selbst analysieren.

direkte Anfrage kann mit Methode unten getan werden.

public static InputStream getInputStreamWithPost(final String url) throws Exception { 

    final URL obj = new URL(url); 
    final HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 

    // optional default is POST 
    con.setRequestMethod("POST"); 

    // add request header 
    con.setRequestProperty("User-Agent", 
          "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB;  rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 (.NET CLR 3.5.30729)"); 
    return con.getInputStream(); 
} 

Java json-Parser ist in „javax.json“ -Paket, aber Sie haben eine Implementierung von Methoden zu verwenden, die Maven-Repository für eine Implementierung ist.

unten Parsing Ergebnis direkt mit Java JSON Parser.

try (final JsonReader rdr = Json.createReader(inputStream)) { 

     final JsonObject jobject = rdr.readObject(); 
     JsonObject jobject1 = jobject.getJsonObject("facets"); 
     jobject1 = jobject1.getJsonObject(metadataName); 
     final JsonArray jsonArray = (jobject1.getJsonArray("buckets")); 

     for (int i = 0; i < jsonArray.size(); i++) { 
      final JsonObject jsonObject = jsonArray.getJsonObject(i); 
      System.out.println(jsonObject.getString("val")); 
      System.out.println(jsonObject.getInt("count")); 
     } 

     return jsonArray; 
    }