Je travaille actuellement sur un projet avec une installation Solr (6.4.0) et j'ai du mal à comprendre une requête, dont je crois avoir besoin pour utiliser ma fonction de requête exigences.Solr - Filtrer les fonctions de requête sur un champ incohérent
Mon application a un noyau Solr qui couvre 5 types de documents différents (les utilisateurs peuvent indexer des sites Web, des documents, des articles, etc.). Le problème que j'ai est que les articles ont des dates de début et de fin afin qu'un utilisateur puisse créer un article à l'avance et fixer une date de début de 2 semaines à partir de maintenant. En interrogeant Solr je veux ajouter une fonction qui ignorera explicitement tout type d'index: article où la date active est plus grande que maintenant, mais n'exclut pas d'autres types de documents comme des sites Web, etc
J'ai lu sur un Wiki de Solr page (https://wiki.apache.org/solr/FunctionQuery#if) où il a quelques bons exemples mais je pense que je peux mal mettre en œuvre car je ne vois pas les résultats souhaités. J'utilise l'extension PECL PHP et et en ajoutant la requête comme ceci:
$query->addFilterQuery("if(exists(active-date), active-date:[* TO NOW], 1)");
Si j'effectuer une recherche *:*
environ 900 résultats sont retournés et l'indice a environ 8000 dossiers où seulement 2 article Ayons dates actives qui sont future et le nombre total de tous les "articles" est d'environ 200 donc il semble filtrer hors d'autres "types d'index" au lieu de renvoyer 1 (nombre positif == vrai) sur la valeur else.
En résumé, j'ai besoin d'une requête qui va chercher le champ "active-date" (qui est seulement configuré sur index-type: article), vérifier si la date est dans le futur - si vrai puis exclure , si false inclut dans le jeu de résultats et si le champ n'est pas présent dans le jeu de résultats.
Merci d'avance!
Vous êtes la réponse a presque donné les résultats souhaités, mais le final OU nécessaire peaufinage. inline '$ query-> addFilterQuery (" (type-index: article AND date-active: [* TO NOW]) OR (*: * -active-date: *) ");' Si vous voulez mettre à jour votre réponse à le code ci-dessus je vais marquer comme répondu afin que vous obteniez le cred parce que je n'aurais pas trouvé ceci sans votre aide :) – UseYourName
Fait. L'ancien exemple était '*: * -index-type: article', mais comme vous n'avez pas de champ de date active sur les autres ressources que celles avec' index-type: article', votre modification fonctionne correctement. – MatsLindh