Solrj SolrQuery.add(SolrParams params)方法中的多个facet.field字段相互覆盖

时间:2013-09-15 09:51:05

标签: field params solrj facet

当我使用SolrQuery的add(SolrParams params)方法添加两个“facet.fields”时,最后一个覆盖第一个,因为SolrQuery.add()方法在内部委托给LinkedHashMap和LinkedHashMap的put()方法有独特的钥匙。

如何将两个facet.field值添加到SolrQuery?我是否真的必须使用更具体的SolrQuery.addFacetField()方法(并使用其他方法为我的facetfield设置mincount和sort之类的东西)?

1 个答案:

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

}