簡體   English   中英

Solr Json在客戶端解析?

[英]Solr Json parsing on Client Side?

我試圖從下面的json中檢索日期和相應的計數,結果證明我不能這樣做。 經過一番努力,我用下面的奇怪代碼結束了嵌套的鏈表。 如何選擇solr_date並計算最終出現:(我歡迎任何可以執行此操作的庫)

    {
  "responseHeader":{
    "status":0,
    "QTime":2,
    "params":{
      "facet":"true",
      "fl":" ",
      "indent":"true",
      "facet.query":" solr_date",
      "q":"solr_body:party",
      "facet.field":"solr_date",
      "json.nl":"arrarr",
      "wt":"json",
      "fq":"   "}},
  "response":{"numFound":19,"start":0,"docs":[
      {},
      {},
      {},
      {},
      {},
      {},
      {},
      {},
      {},
      {}]
  },
  "facet_counts":{
    "facet_queries":{
      " solr_date":0},
    "facet_fields":{
      "solr_date":
      [
        ["2013-06-19T13:48:02Z",10], *********************************
        ["2013-07-25T13:48:02Z",2],
        ["2013-07-27T13:48:02Z",2],
        ["2013-07-24T13:48:02Z",1],          I need these numbers individually. Date and corresponding number. 
        ["2013-07-26T13:48:02Z",1],
        ["2013-07-28T13:48:02Z",1],
        ["2013-07-29T13:48:02Z",1],
        ["2013-07-30T13:48:02Z",1]]},  ***************************
    "facet_dates":{},
    "facet_ranges":{}}}

下面的Java代碼:

  ObjectMapper mapper = new ObjectMapper();
        //   JsonNode rootNode = m.readTree(new URL("http://173.255.245.138:8983/solr/collection1/select?q=*%3A*&wt=json&indent=true"));
             Map<String, Object> mapObject   =   mapper.readValue(new URL("http://ipa.ddr.ess.000:8983/solr/collection1/select?q=solr_body%3Aparty&fq=+++&fl=+&wt=json&json.nl=arrarr&indent=true&facet=true&facet.query=+solr_date&facet.field=solr_date"),new TypeReference<Map<String, Object>>() {});
            LinkedHashMap<String,LinkedHashMap<String,LinkedHashMap<String,ArrayList<String>>>> list = (LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, ArrayList<String>>>>) mapObject.get("facet_counts");

我建議使用SolrJ客戶端:

Solrj是一個訪問solr的java客戶端。 它提供了一個java接口來添加,更新和查詢solr索引。

如果您正在使用Gson ,並且您實際上只對您突出顯示的部分感興趣,則可以進行手動解析 像這樣的東西:

//Create parser and get the root object
JsonParser parser = new JsonParser();
JsonObject rootObj = parser.parse(json).getAsJsonObject();

//Get the solr_date array
JsonArray solrDateArray = rootObj
                            .getAsJsonObject("facet_counts")
                            .getAsJsonObject("facet_fields")
                            .getAsJsonArray("solr_date");

//Create arrays to store the data you want to retrieve
List<String> datesList = new ArrayList<>();
List<Integer> countsList = new ArrayList<>();

//Iterate the solr_date array
Iterator<JsonElement> it = solrDateArray.iterator();
while (it.hasNext()) {
    //The solr_date array contains in turn arrays, so we parse each
    JsonArray array = it.next().getAsJsonArray();
    //and store in your Lists the values
    datesList.add(array.get(0).getAsString());
    countsList.add(array.get(1).getAsInt()); 
}

現在你必須List對象,一個包含所有日期,另一個包含所有計數:

datesList: ["2013-06-19T13:48:02Z", "2013-07-25T13:48:02Z", 2013-07-27T13:48:02Z, ...]
countsList: [10, 2, 2, ...]

注意 :您可以使用Map<Integer, String>代替使用2個List對象,而不是...

我做到了這樣的事情。

HttpSolrServer server = new HttpSolrServer("http://localhost:8084/apache-solr-3.6.0/");
server.setParser(new XMLResponseParser()); 

SolrQuery solrQuery = new SolrQuery();
solrQuery.setQuery("keyword");
solrQuery.setFilterQueries("keyword");
solrQuery.setHighlight(true);
solrQuery.setHighlightRequireFieldMatch(true);
solrQuery.addHighlightField("syndrome");
solrQuery.setStart(0);
solrQuery.setRows(10);

QueryResponse serverResponse = null;
try {
    serverResponse = server.query(solrQuery);
} catch (SolrServerException e) {
    e.printStackTrace();
}

Gson gson = new Gson(); 
List<SolrDocument> docs = new ArrayList<SolrDocument>();
for (SolrDocument doc:serverResponse.getResults()) {
    docs.add(doc);
}

Map<String, String> pairs= new HashMap<String, String>();
Integer count = new Integer(0);
for (SolrDocument doc:docs){
    pairs.put(("start_date" + count), doc.getFieldValue("start_date").toString());
    pairs.put(("test_file_result_id" + count), doc.getFieldValue("test_file_result_id").toString());
    pairs.put(("job_id" + count), doc.getFieldValue("job_id").toString());
    pairs.put(("cluster" + count), doc.getFieldValue("cluster").toString());
    pairs.put(("test_file_result_id" + count), doc.getFieldValue("test_file_result_id").toString());
    count++;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM