我使用了标签和排除滤镜功能来实现多选择切面。
这些是我的示例数据:
<doc>
<field name = "internalid">001</field>
<field name = "title">Book 1</field>
<field name = "documentType">Book</field>
<field name = "categoryTag">Car</field>
<field name = "categoryTag">Bicycle</field>
</doc>
<doc>
<field name = "internalid">002</field>
<field name = "title">Book 2</field>
<field name = "documentType">Book</field>
<field name = "categoryTag">Car</field>
<field name = "categoryTag">Motobike</field>
</doc>
<doc>
<field name = "internalid">003</field>
<field name = "title">Book 3</field>
<field name = "documentType">Book</field>
<field name = "categoryTag">Bicycle</field>
</doc>
我的请求:
http://localhost:8983/solr/test_collection/select?q=*:*&facet=true&fq={!tag=categoryTag}categoryTag:Car&facet.field={!ex=categoryTag}categoryTag
反应:
"facet_fields":{
"categoryTags":[
"Car",2,
"Bicycle",2,
"Motobike",1]}
所以我想要实现的是预先计算如果我加上"自行车",会得到多少结果?作为附加的OR过滤条件。对于单值字段,我只需求和&;Car(2)+Bicycle(2)=4"。但这里我有一个交集第一个条目包含两个标签&;car &;和";Bicycle"。所以正确的预计算应该是"3";在这里。我在谷歌上搜索了很多,但没有找到合适的解决方案。如果能找到一个好的方法,我将非常高兴。致以最亲切的问候。
非常感谢您的投入!!
我认为Pivot, JSON Facet API甚至Group结果都不会做这里实际需要的。
这是我的解。
第一个查询:
?q=*:*&facet=true&fq={!tag=categoryTag}categoryTag:Car&facet.field={!ex=categoryTag}categoryTag
第二个查询:
?q=*:*&facet=true&fq=categoryTag:Car&facet.field=categoryTag
第一个结果:
"facet_fields":{
"categoryTag":[
"Car",2,
"Bicycle",2,
"Motobike",1]}
第二个结果:
"facet_fields":{
"categoryTag":[
"Car",2,
"Bicycle",1,
"Motobike",1]}
标签" bicycle ";
2(Bicycle-Result1)+2(CAR-Result1 - SUM all selected)-1(Bicycle-Result2)=3
标签"Motobike";
1(Motobike-Result1)+2(CAR-Result1 - SUM all selected)-1(Motobike-Result2)=2
这是目前为止我能确定的唯一解决方案。