我从我的 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]);
}
然后我使用以下代码在 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 方法只为最后一个设置方面设置过滤器。这意味着如果我运行循环并使用此函数三次,它只采用最后设置的过滤器值。有人可以澄清这一点并告诉我这样做的更好方法。我也在解码网址。所以,如果我的方面在中间包含一些特殊字符,那么我不会得到任何结果。我也尝试在不编码的情况下使用它,但它没有用。:(