2012-05-21 7 views
5

Ich habe einige ziemlich komplexe Anforderungen für eine SOLR-Suche, die ich für meine Datenbank mit getaggtem Inhalt ausführen muss. Ich muss zuerst die Datenbank auf jene Ergebnisse filtern, die meinen Filtertags entsprechen. Alle Ergebnisse mit einem Tag aus der Blacklist sollten entfernt werden, es sei denn, sie enthalten auch Tags aus der Whitelist.Komplexe SOLR-Abfrage einschließlich NOT und OR

Also sagen wir, ich möchte alle Dokumente abrufen, die mit "forest" oder "conservation" gekennzeichnet sind. Aber ich möchte Dokumente ausschließen, die mit "Großbritannien" oder "Europa" gekennzeichnet sind - es sei denn, sie sind auch mit "Afrika" oder "Asien" markiert. Ich habe versucht, dies in meiner SOLR Abfrage zu schreiben:

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

Die Logik scheint mir Ton, aber die Abfrage funktioniert nicht. Ich habe 46 Dokumente, die mit "forest" oder "conservation" getaggt sind - von denen eines auch mit "asia" getaggt ist und keines mit "uk" oder "europe" getaggt ist, aber die Abfrage gibt keine Ergebnisse zurück.

Ich sah auch Informationen über den Parameter fq (gefilterte Abfrage) zu SOLR, die klang, als könnte es nützlich sein. Aber das schien auch nicht zu helfen. Es scheint, dass es die Kombination von NOT und OR ist, die bewirkt, dass SOLR zusammenbricht.

Was versuche ich zu tun? Ist meine Logik irgendwo fehlerhaft? Dies ist auf SOLR 1.4 btw - falls dies ein Problem ist, das irgendwo gelöst wurde ....

Danke für jeden Hinweis!

+0

SOLR 4.1, obwohl, nicht wahr? –

+0

Nein - es war 1.4! Seit dem Upgrade aber ... – vitch

+0

Oh, du armer Kerl. :( –

Antwort

8

versuchen

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

Danke - das macht es! Könnten Sie ein wenig mehr darüber erklären, warum? Es scheint, dass die Negationen brauchen das komplette Set '(*: *)' zu entsprechen? – vitch

+0

genau, es ist, was Sie denken – Persimmonium