有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在正文中传递Json字符串以使用Solrj查询solr

我正在使用httpclient从java代码查询solr服务器。现在我只想使用solrj库转换所有代码。我找不到任何合适的文档。 我现有的代码是这样的

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实现同样的功能?下面是使用curlJSON Request API执行相同操作的文档

我想将inputJson字符串作为请求正文发送。此Json字符串可能包含任何动态键值。正如我使用HTTPREST调用所展示的那样,这是可行的。但是如何使用solrj实现同样的功能呢


共 (1) 个答案

  1. # 1 楼答案

    下面是一个通过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();
        }
    }
    

    如果您想获得json的原始输出,SolrJ将把结果包装成Java对象。然后我建议您使用HttpClient等工具通过SolrWeb的url检索结果,然后通过Jackson将结果解析到json树JsonNode