简体   繁体   English

在主体中传递Json字符串以使用Solrj查询solr

[英]Pass Json string in body to query solr using Solrj

I am using httpclient to query solr server from java code. 我正在使用httpclient从Java代码查询solr服务器。 Now I just want to convert all of my code using solrj library. 现在,我只想使用solrj库转换所有代码。 I am not able to find any proper documentation for it. 我找不到适合它的任何文档。 My existing code is like this 我现有的代码是这样的

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

How to do the same using solrj? 如何使用solrj做同样的事情? Here is documentation for the same to do by using curl JSON Request API 这是使用curl JSON Request API要做的相同操作的文档

I want to send inputJson String as request body. 我想发送inputJson String作为请求正文。 This Json String may contain whatever dynamic key values. 此Json字符串可以包含任何动态键值。 It is doable as I have shown using http rest call. 正如我使用http rest调用所示,它是可行的。 But how to do same using solrj? 但是如何使用solrj做同样的事情?

Here is a simple query example via SolrJ : 这是一个通过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 will wrap result into Java objects, if u want to get the raw output as json. 如果您想将原始输出作为json,SolrJ会将结果包装到Java对象中。 Then I suggest u to use the tools like HttpClient to retrieve the result via url of solr web, then parse the result via Jackson into json tree JsonNode . 然后,我建议您使用HttpClient之类的工具通过solr网站的url检索结果,然后通过Jackson将结果解析为json树JsonNode

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM