使用SolrJ检索JSON构面

时间:2016-04-25 04:25:56

标签: solr lucene

我使用SolrJ和Json facet API来获得方面。但是我的SolrJ查询响应对象只包含文档,没有构面。我的方面是一个嵌套的结构。 SolrJ目前是否支持Json方面,或者我需要解析自己?

此外,子对象上的构面只包含计数,没有值。我如何得到像法国,意大利这样的方面的术语?

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

1 个答案:

答案 0 :(得分:0)

您必须解析facet结果,因为解析它不是太明显。您可以使用response.getResponse().get("facets");,也可以直接请求服务器并自行解析结果。

直接请求可以通过以下方法完成。

   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解析器位于“javax.json”包中,但您必须使用方法的实现, 实现的maven存储库。

<!-- https://mvnrepository.com/artifact/org.glassfish/javax.json -->
    <dependency>
        <groupId>org.glassfish</groupId>
        <artifactId>javax.json</artifactId>
        <version>1.0.4</version>
        <scope>provided</scope>
    </dependency>
下面的

是使用java的json解析器直接解析结果。

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;
    }