solrQuery.setFilteQueries()方法中的问题

时间:2011-09-12 09:02:19

标签: solr facet solrj

我从网址

获取以下查询
public static String query="pen&mq=pen&f=owners%5B%22abc%22%5D&f=application_type%5B%22cde%22%5D";

public static String q="pen";

我解析了我的查询字符串并从中获取了每个facetname和facet值并存储在地图中

String querydec = URLDecoder.decode(query, "UTF-8");
String[] facetswithval = querydec.split("&f=");
Map<String, String> facetMap = new HashMap<String, String>();
for (int i = 1; i < facetswithval.length; i++) {

        String[] fsplit = facetswithval[i].split("\\[\"");
        String[] value = fsplit[1].split("\"\\]");

        facetMap.put(fsplit[0], value[0]);
    }

然后我使用以下代码在solr中使用solrj

进行查询
CommonsHttpSolrServer server = new CommonsHttpSolrServer("http://localhost:8983/solr/");

        SolrQuery solrQuery = new SolrQuery();
        solrQuery.setQuery(q);

        for (Iterator<String> iter = facetMap.keySet().iterator(); iter.hasNext();){
              String key=iter.next();
              System.out.println("key="+key+"::value="+facetMap.get(key));
              solrQuery.setFilterQueries(key+":"+facetMap.get(key));
          }
        solrQuery.setRows(MAX_ROW_NUM);
        QueryResponse qr = server.query(solrQuery);
        SolrDocumentList sdl = qr.getResults();

但是在运行我的代码后,我发现solrQuery.setFilterQuery方法只为最后设置的facet设置过滤器。这意味着如果我运行循环并使用此函数三次,它只采用最后设置的过滤器值。 有人可以澄清这一点并告诉我更好的方法来做到这一点。我也在解码网址。所以,如果我的方面在中间包含一些特殊字符,那么我没有得到任何结果。我尝试使用它而不编码但它没有用。 :(

1 个答案:

答案 0 :(得分:4)

还有一个addFilterQuery方法,我会称之为,因为您在for循环中单独设置过滤器查询。

此外,请从Solr用户邮件列表中查看此帖Filter query with special character using SolrJ client,了解是否仍需要在查询中转义特殊字符。