Je travaille sur un filtre de produit pour notre site Web et j'ai rencontré quelques difficultés concernant l'utilisation de "facet.missing = true".Problème avec une requête de facette négative en utilisant solr pour la valeur manquante
Je sais que je suis censé utiliser un filtre de requête comme "fq = -facetField: [* TO *]" pour filtrer les résultats aux produits avec ce champ manquant.
J'ai construit une aide de filtre global pour mon application qui construit le paramètre fq dynamiquement pour toutes les requêtes pour éviter tout de manquer sur les filtres en fonction d'autorisation de l'utilisateur qui ressemble essentiellement comme celui-ci (php):
$params['fq'] = sprintf('((%s) AND (%s))', $custom, $system);
où système $ est le filtre à base globale la permission, ce qui pourrait ressembler à (non réelle mais similaire):
(isdiscontinued:0 AND ishidden:0 AND contract:3)
personnalisé $ contient le filtre réelle recherche, l'utilisateur construit via l'interface utilisateur. Supposons que le filtre bluetooth du portable porte le nom fq_bluetooth avec des valeurs: Non, Oui ou la valeur est manquante. Cela rendrait le look fq finale comme:
((-fq_bluetooth:[* TO *]) AND ((isdiscontinued:0 AND ishidden:0 AND contract:3)))
Cependant retourne 0 produits pour la requête que je vous envoie pour cette catégorie.
Si je modifie la requête de filtre:
((fq_bluetooth:[* TO *]) AND ((isdiscontinued:0 AND ishidden:0 AND contract:3)))
Puis-je obtenir le résultat pourrait attendre des comtes de Oui + Non, sans tenir compte du non précisé.
Comment dois-je formater la requête de filtre pour que cela fonctionne correctement?
[modifier]
Je pourrais aussi vouloir combiner les facettes et peut-être filtrer seulement produits sans Bluetooth ou ceux où Bluetooth n'est pas spécifiée. Alors peut-être comme celui-ci (ce qui bien sûr ne fonctionne pas non plus):
((-fq_bluetooth:[* TO *] OR fq_bluetooth:"No") AND ((isdiscontinued:0 AND ishidden:0 AND contract:3)))
Je remarque avec debugQuery, je vois une requête de filtre comme:
fq_bluetooth:("No" OR -[* TO *])
être analysé comme:
fq_bluetooth:No -fq_bluetooth:[* TO *]
Je ne vois pas l'OR dans la requête analysée - et de mes recherches les requêtes de paramètres fq ne respectent pas l'opérateur OR (??).
Peut-être que l'OR fonctionne, mais comme la requête négative semble échouer par elle-même, c'est peut-être pourquoi je ne peux pas voir le fonctionnement de l'OR lorsqu'il est combiné comme ça.
Merci pour la réponse! Qux de J'avais réussi à tenter que faire ma requête comme: fq = -fq_bluetooth: [* A *] & FQ = (isdiscontinued: 0 ET IsHidden: 0 ET contrat: 3) (BTW, il y a plus au filtre du système, y compris plusieurs groupes et Éléments ORed). Bien que la requête a travaillé, il échouerait quand je voulais ajouter plusieurs conditions: fq = fq_bluetooth :("Non" OU - [* A *]) & FQ = (isdiscontinued: 0 ET IsHidden: 0 ET contrat: 3) – Chris
Avez-vous essayé sans parenteshis? dire fq = fq_bluetooth: "Non" OU - [* A *] – qux
Le problème est la clause niée. Essayez comme ceci: 'fq = fq_bluetooth: Non OU (-fq_bluetooth: [* A *] *: *)' Cela fonctionne pour moi. Donc, chaque fois que vous voulez faire correspondre des valeurs manquantes, utilisez '(-fieldname: [* TO *] *: *)' dans le générateur de requêtes de votre application – qux