I'm not sure if this is possible, but I'd like to be able to control the counts returned for facets more closely than just include and exclude.
Specifically, I have an interface that allows users to filter by 'facetA' and 'facetB'. It looks a little like this
Filter by - facetA: article (20), image (6), activity (14) - facetB: cats (23), dogs(12), hedgehogs(5)
The interface makes it clear that facetA is higher in the hierarchy than facetB. I'd like the facetA counts to be completely persistent, and the facetB counts to also be persistent, but to depend on the selection of facetA.
So, the interface might react to a change to facetB with:
Filter by - facetA: article (20), image (6), activity (14) - facetB: cats (23), dogs(12), hedgehogs(5)
i.e. none of the counts change.
But it would react to a facetA change like this:
Filter by - facetA: article (20), image (6), activity (14) - facetB: cats (15), dogs(4), hedgehogs(1)
i.e, the facetB counts change to reflect what is available after the facetA filter has been applied.
Just doing
&facet.field={!ex=dt}fieldA&facet.field={!ex=dt}fieldB
doesn't achieve what I want it to, but it is close. I find the instructions on this in the solr wiki are very vague - like I don't even know what the 'dt' stands for. Can anyone elaborate? Can I get finer control over how counts get excluded?
Ok, I figured this out. 'dt' is a user specified tag, which is set using the {!tag=*} statement, and referenced using the {!ex=} statement.
So, the example above is fixed if I add the following to my query:
&fq={!tag=tagA}fieldA:facetASelection
&fq={!tag=tagB}fieldB:facetBSelection
&facet=true
&facet.field={!ex=tagA}fieldA
&facet.field={!ex=tagB}fieldB
This means that the selection (fq) for facetA doesn't effect the counts for facetA, and the selection (fq) of facetB doesn't effect the counts for facetB.
Sweet! I had almost resigned myself to sending multiple queries to get the info I needed.