facet.queryをつかったファセットの操作
検索クエリとは別にfacet.queryを使って、ファセットの絞込ができるのを最近しった。
実はsolr5.3からついてたみたい。
excludeTagによる除外
q=動物
fq={!tag=cat}category:ネコ科
facet=true
facet.field={!ex=cat}category
fqにタグをつけてfacetのところにexで参照させると、facetカウントから除外することができる。 これをするとクエリ動物での検索結果とそのうちネコ科のステータスを抜いた(exclude)ものがfacetのカウントになる。
ファセットを更に絞り込んだ値にする。
q=動物
facet.query={!tag=q1}category:ネコ科
facet=true
facet.field={!query=q1}category
今度は動物の検索結果で、ファセットにはネコ科のものだけがカウントされるようになる。 facet.queryに指定してそれにtagをつけて、それをfacet.fieldのパラメーターの中にlocalparamの要領 で使って行くらしい。ちなみに、pivotとかにもくっつける事ができる。
パフォーマンスはあまりよくないので、いろいろデータを見ているときに利用する感じかな。 スキーマと表示データが固まった状態なら、検索にヒットさせるように加工しておいたほうが本番環境は良さそう。
ファセットを見ていて、特定の属性以外のものだけみたい!とか、データをパッと見るのは便利そう。 覚えておこう。