2015-12-22 95 views
0

我使用httpclient从java代码查询solr服务器。现在我只想使用solrj库转换我的所有代码。我无法找到任何适当的文件。 我现有的代码是这样的使用Solrj将Json字符串传递到查询solr

HttpURLConnection conn = (HttpURLConnection) new URL(url.toString()).openConnection(); 
conn.setDoOutput(true); 
conn.setRequestMethod("POST"); 
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
conn.setRequestProperty("Content-Type", "application/json"); 
conn.setRequestProperty("Accept", "*/*"); 
conn.setInstanceFollowRedirects(false); 
OutputStream os = conn.getOutputStream(); 
os.write(inputJson.getBytes()); 
os.flush(); 
os.close(); 
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
//read resp from rd 

如何做好使用solrj一样吗?这里是使用卷曲相同的文档JSON Request API

我想发送inputJson字符串作为请求正文。这个Json字符串可能包含任何动态键值。这是可行的,因为我已经显示使用http休息调用。但如何使用solrj做同样的事情?

回答

0

下面是一个简单的查询例如,通过SolrJ

package eric.search.solr.solrj; 

import java.io.IOException; 

import org.apache.solr.client.solrj.SolrClient; 
import org.apache.solr.client.solrj.SolrQuery; 
import org.apache.solr.client.solrj.SolrServerException; 
import org.apache.solr.client.solrj.impl.HttpSolrClient; 
import org.apache.solr.client.solrj.response.QueryResponse; 
import org.apache.solr.common.SolrDocumentList; 

/** 
* SolrJ test - solr5 
* 
* @author eric 
* @date Aug 7, 2015 3:56:08 PM 
*/ 
public class Solrj5Test { 
    // query via edismax - test 
    public static void queryEdismaxTest() { 
     String coreUrl = "http://localhost:8983/solr/search_cn"; 
     SolrClient client; 
     try { 
      // create client 
      client = new HttpSolrClient(coreUrl); 

      // create query, 
      SolrQuery query = new SolrQuery(); 

      query.setQuery("java"); // q 
      query.addFilterQuery("authors:布鲁斯"); // fq 
      // query.setFields("id", "cn_name", "en_name", "authors"); // fl 
      query.setStart(0); // start 
      query.setRows(10); // rows 
      query.set("defType", "edismax"); // defType 
      query.set("qf", "cn_name"); // qf 

      // get response 
      QueryResponse response = client.query(query); 

      // get documents 
      SolrDocumentList docList = response.getResults(); 

      System.out.printf("doc count: %d\n", docList.size()); 
      client.close(); 
     } catch (SolrServerException | IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void main(String[] args) { 
     queryEdismaxTest(); 
    } 
} 

SolrJ会导致包装成Java对象,如果u想要得到的原始输出为JSON。然后我建议你使用像HttpClient这样的工具通过solr web的url检索结果,然后通过Jackson将结果解析为json树JsonNode