Solr comment affiner la recherche à une marque spécifique et également obtenir tous les frères et sœurs de cette marque en une seule requête ?
Quand j'entre dans cette URL
http://localhost:8983/solr/shop/select?facet.field=brand&facet=on&facet.mincount=1&fl=name,brand,cat&q=mobile
j'ai suivi
response {
"responseHeader":{
"status":0,
"QTime":0,
"params":{
"q":"mobile",
"facet.field":"brand",
"fl":"name,brand,cat",
"facet.mincount":"1",
"facet":"on"}},
"response":{"numFound":7,"start":0,"docs":[
{
"name":"moto g",
"brand":"motorola",
"cat":["mobile"]},
{
"name":"moto x",
"brand":"motorola",
"cat":["mobile"]},
{
"name":"iphone 5",
"brand":"apple",
"cat":["mobile"]},
{
"name":"iphone 4",
"brand":"apple",
"cat":["mobile"]},
{
"name":"iphone 5c",
"brand":"apple",
"cat":["mobile"]},
{
"name":"iphone 4s",
"brand":"apple",
"cat":["mobile"]},
{
"name":"iphone 5s",
"brand":"apple",
"cat":["mobile"]}]
},
"facet_counts":{
"facet_queries":{},
"facet_fields":{
"brand":[
"apple",5,
"motorola",2]},
"facet_ranges":{},
"facet_intervals":{},
"facet_heatmaps":{}}}
Maintenant, je souhaite restreindre la recherche aux téléphones mobiles de la marque Apple . Pour cela, j'utilise une requête de filtrage comme celle-ci :
http://localhost:8983/solr/shop/select?facet.field=brand&facet=on&facet.mincount=1&fl=name,brand,cat&q=mobile&fq=brand:apple
et j'obtiens ce résultat :
{
"responseHeader":{
"status":0,
"QTime":1,
"params":{
"q":"mobile",
"facet.field":"brand",
"fl":"name,brand,cat",
"facet.mincount":"1",
"fq":"brand:apple",
"facet":"on"}},
"response":{"numFound":5,"start":0,"docs":[
{
"name":"iphone 5",
"brand":"apple",
"cat":["mobile"]},
{
"name":"iphone 4",
"brand":"apple",
"cat":["mobile"]},
{
"name":"iphone 5c",
"brand":"apple",
"cat":["mobile"]},
{
"name":"iphone 4s",
"brand":"apple",
"cat":["mobile"]},
{
"name":"iphone 5s",
"brand":"apple",
"cat":["mobile"]}]
},
"facet_counts":{
"facet_queries":{},
"facet_fields":{
"brand":[
"apple",5]},
"facet_ranges":{},
"facet_intervals":{},
"facet_heatmaps":{}}}
Je suis content du résultat. Mais je veux aussi que facet_fields contienne à la fois apple et motorola. En un mot, j'ai besoin du résultat suivant:
{
"responseHeader":{
"status":0,
"QTime":1,
"params":{
"q":"mobile",
"facet.field":"brand",
"fl":"name,brand,cat",
"facet.mincount":"1",
"fq":"brand:apple",
"facet":"on"}},
"response":{"numFound":5,"start":0,"docs":[
{
"name":"iphone 5",
"brand":"apple",
"cat":["mobile"]},
{
"name":"iphone 4",
"brand":"apple",
"cat":["mobile"]},
{
"name":"iphone 5c",
"brand":"apple",
"cat":["mobile"]},
{
"name":"iphone 4s",
"brand":"apple",
"cat":["mobile"]},
{
"name":"iphone 5s",
"brand":"apple",
"cat":["mobile"]}]
},
"facet_counts":{
"facet_queries":{},
"facet_fields":{
"brand":[
"apple",5,
"motorola",2]},
"facet_ranges":{},
"facet_intervals":{},
"facet_heatmaps":{}}}
Merci pour la réponse à l'avance.
Vous pouvez utiliser le balisage de filtre et l'exclusion de filtre pour toujours obtenir la liste complète des facettes, quels que soient les filtres spécifiques.
q=mobile&fq={!tag=brand}brand:apple&facet=on&facet.field={!ex=brand}brand