2010-03-04 6 views
1

Je rencontre un problème de syntaxe de requête solr (je pense) avec solr 1.4. J'essaie d'exclure les enregistrements expirés d'une requête solr. Cependant, si l'enregistrement n'a pas de dossier d'expiration, je voudrais également rendre ce dossier. Par exemple.Supprimer les enregistrements expirés dans la syntaxe de requête solr

Pour obtenir uniquement une liste d'enregistrement qui n'ont pas expiré j'utilise cette requête:

expirydate:[NOW/DAY TO *] 

Alors je pensais que pour obtenir une liste de documents qui ne pas ont une date d'expiration je peux

-expirydate:[* TO *] 

Les deux requêtes fonctionnent toutes seules. C'est à dire. la première requête rapporte 3 enregistrements. La deuxième requête ramène 921 enregistrements. Cependant, quand je combine les 2 requêtes avec un OU je reçois 0 enregistrements:

expirydate:[NOW/DAY TO *] OR -expirydate:[* TO *] 

Toutes les idées que je fais mal?

Merci

Dave

+0

dupliquer: http://stackoverflow.com/questions/634765/using-or-and-not-in-solr-query –

Répondre

2

pas 100% sûr, mais je ne pense pas que vous pouvez combiner ou avec l'opérateur de négation de cette manière.

Essayez d'ajouter un champ factice avec la même valeur dans tous les documents et essayer

enddate:[NOW/DAY TO *] OR (dummy:yes -enddate:[* TO *]) 
+0

Wicked .. qui fonctionne totalement. Je vous remercie. J'ai déjà un champ que je peux utiliser qui ne change pas. +1 – CraftyFella

+0

Pensez-vous que c'est un bug de Solr? Ou est-ce que je n'utilise pas la syntaxe correctement? – CraftyFella

1

Je viens de faire face à ce problème, je me suis rendu sur l'implémentation de la réponse approuvée, mais alors rendu compte que je pouvais le faire:

-expired jour

: [* NOS JOURS]

Cela a fonctionné, peu importe si le document avait expiré jour ensemble.

Questions connexes