2012-05-21 10 views
5

Ho alcuni requisiti abbastanza complessi per una ricerca SOLR che devo eseguire sul mio database di contenuto taggato. Devo prima filtrare il database in base a quei risultati che corrispondono ai miei tag filtro. Tutti questi risultati che hanno un tag dalla lista nera dovrebbero essere rimossi a meno che non contengano anche tag dalla whitelist.Query SOLR complessa che include NOT e OR

Quindi supponiamo di voler recuperare tutti i documenti taggati "foresta" o "conservazione". Ma voglio escludere i documenti taggati "uk" o "europe" - a meno che non vengano anche taggati con "africa" ​​o "asia". Ho provato a scrivere questo nella mia domanda SOLR:

tag:((forest OR conservation) AND (africa OR asia OR !uk OR !europe)) 

La logica mi sembra valida ma la query non funziona. Ho 46 documenti taggati con "foresta" o "conservazione" - uno dei quali è anche etichettato con "asia" e nessuno dei quali è contrassegnato con "uk" o "europe", ma la query non restituisce risultati.

Ho anche visto informazioni sul parametro fq (filtrato query) su SOLR che sembrava potesse essere utile. Ma neanche questo sembrava aiutare. Sembra che sia la combinazione di NOT e OR che causa la rottura di SOLR.

È quello che sto cercando di fare possibile? La mia logica è difettosa da qualche parte? Questo è su SOLR 1.4 btw - nel caso questo è un problema che è stato risolto da qualche parte ....

Grazie per qualsiasi consiglio!

+0

SOLR 4.1, però, giusto? –

+0

No: era 1,4! Dal momento che aggiornato però ... – vitch

+0

Oh, povero ragazzo. :( –

risposta

8

provare

tag:((forest OR conservation) AND (africa OR asia OR (*:* AND !uk AND !europe))) 
+1

Grazie - lo fa! Potresti spiegare un po 'di più sul perché? Sembra che le negazioni abbiano bisogno del set completo '(*: *)' da abbinare? – vitch

+0

esattamente, è quello che pensi – Persimmonium