SolrQuery 的 SetQuery 函数中 String 参数的正确用例?

Correct use case of String parameter in SetQuery function of SolrQuery?

我有 q

queryString = "select?wt=json&rows=0&indent=true&facet=true&q=*:*&facet=true&facet.field=outcome_type"

如果像这样查询:

http://x.x.x.x:8983/solr/abc/queryString 

有效。这里abc是核心

现在我想以编程方式执行它,并使用以下方法:

    SolrQuery query = new SolrQuery();
    query.setQuery(queryString);
    QueryResponse resp = server.query(query);

此处queryString如上定义,但return出现以下错误:

Exception in thread "main" org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: undefined field text

我在这里缺少什么?或者我需要通过设置函数构建查询?

我使用了以下方法来执行查询并且有效:

    SolrQuery query = new SolrQuery();
    query.setQuery(queryString);
    query.setFacet(true);
    query.set("wt", "json");
    query.set("indent",true);
    query.setRows(0);
    query.addFacetField("outcome_type");
    QueryResponse resp = server.query(query);

我看你的试探性问题不大。

  1. 您不应使用 setQuery 方法传递整个查询字符串。对于查询字符串中可用的几乎每个参数,在 SolrQuery class 中都有相应的方法。

  2. SolrQuery不支持json格式,SolrJ只支持javabinxml格式,建议不要指定任何wt参数.

所以,您应该只对 q 参数使用 setQuery 方法:

query.setQuery("*:*");

其余参数,最简单的方法是使用add方法:

query.add("rows", "0");  // instead of setRows(0)
query.add("indent", "true"); 
query.add("facet", "true"); // ... setFacet(true)
query.add("facet.field", "outcome_type"); // ... addFacetField("outcome_type")

希望对您有所帮助