solrQuery.setFiltQueries()方法中存在问题

solrQuery.setFiltQueries()方法中存在问题,solr,facet,solrj,Solr,Facet,Solrj,我从我的URL获取了以下查询 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, "UT

我从我的URL获取了以下查询

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]);
    }
String querydecode=urldecker.decode(查询,“UTF-8”);
字符串[]facetswithval=querydec.split(“&f=”);
Map facetMap=newhashmap();
for(int i=1;i
然后我使用以下代码在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();
CommonHttpSolrServer服务器=新的CommonHttpSolrServer(“http://localhost:8983/solr/");
SolrQuery SolrQuery=新的SolrQuery();
setQuery(q);
for(迭代器iter=facetMap.keySet().Iterator();iter.hasNext();){
String key=iter.next();
System.out.println(“key=“+key+”::value=“+facetMap.get(key));
setFilterQueries(key+”:“+facetMap.get(key));
}
setRows(最大行数);
QueryResponse qr=server.query(solrQuery);
SolrDocumentList sdl=qr.getResults();
但在运行我的代码之后,我发现solrQuery.setFilterQuery方法只为最后一组方面设置了过滤器。这意味着,如果我运行循环并使用此函数三次,它只接受最后设置的过滤器值。
请有人澄清一下,告诉我更好的方法。我也解码网址。所以,如果我的刻面在中间有一些特殊的字符,那么我就不会得到任何结果。我也尝试过不用编码就使用它,但它不起作用(

还有一个
addFilterQuery
方法,我会调用它,因为您正在for循环中单独设置过滤器查询


另外,请参阅Solr用户邮件列表中的这篇文章,内容是关于在查询中仍然需要转义特殊字符。

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

另外,请参阅Solr用户邮件列表中的这篇文章,关于在查询中仍然需要转义特殊字符