当我使用SolrQuery的add(SolrParams params)方法添加两个“facet.fields”时,最后一个覆盖第一个,因为SolrQuery.add()方法在内部委托给LinkedHashMap和LinkedHashMap的put()方法有独特的钥匙。
如何将两个facet.field值添加到SolrQuery?我是否真的必须使用更具体的SolrQuery.addFacetField()方法(并使用其他方法为我的facetfield设置mincount和sort之类的东西)?
答案 0 :(得分:3)
似乎SolrQuery.add(SolrParams params)
会覆盖相同的键:
ModifiableSolrParams params1 = getParamsForTagsFacet(); // this has a 'facet.field'
ModifiableSolrParams params2 = getParamsForRegionsFacet(); // this has a 'facet.field'
SolrQuery q = new SolrQuery() // extends ModifiableSolrParams
q.add(params1); // adds first 'facet.field'
q.add(params2); // overwrites first 'facet.field'
使用q.add(String key, String... value)
来保留两个'facet.field'键
ModifiableSolrParams solrParams = facet.createSolrParams();
Iterator<String> iterator = solrParams.getParameterNamesIterator();
while(iterator.hasNext()){
String param = iterator.next();
String value = solrParams.get(param);
// adding multiple identical params like this works.
// It creates a single key with multiple values in the underlying LinkedHashMap
q.add(param, value);
}