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

时间:2016-01-24 04:14:37

标签: java solr solrj

我有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如上所定义,但它返回以下错误:

  

线程“main”中的异常   org.apache.solr.client.solrj.impl.HttpSolrServer $ RemoteSolrException:   未定义的字段文本

我在这里缺少什么?或者我需要通过set functions构建查询?

2 个答案:

答案 0 :(得分:2)

我认为你的试探性问题很少。

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

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

  3. 因此,您应该仅对setQuery参数使用q方法:

    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")
    

    希望这有帮助

答案 1 :(得分:0)

我使用了以下方法来执行查询,但它确实有效:

    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);

enter image description here