我使用SolrJ和Json facet API来获得方面。但是我的SolrJ查询响应对象只包含文档,没有构面。我的方面是一个嵌套的结构。 SolrJ目前是否支持Json方面,或者我需要解析自己?
此外,子对象上的构面只包含计数,没有值。我如何得到像法国,意大利这样的方面的术语?
facets={
count=57477,
apparels={
buckets=
{
val=Chanel,
count=6,
madeIn={
count=6
}
}
}
}
答案 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;
}