2013-05-24 6 views
6

Für eine Filterabfrage in Solr muss ich alle Dokumente nicht eines bestimmten Typs sowie alle Dokumente dieses Typs einschließen, die einen Wert in einem bestimmten Feld haben.Solr-Filter-Abfrage einschließlich NOT und OR

Ich habe versucht, dieses:

fq=(-type_id:(A) OR content:(['' TO *])) 

Aber es ist ohne Dokumente von type_id B, C, usw., die null content haben. (type_id ist ein string Feld und content ist text.)

ich diese Frage gesehen haben: Complex SOLR query including NOT and OR und diesen Beitrag über Operatoren: http://robotlibrarian.billdueber.com/solr-and-boolean-operators/. Ich denke, dass die Syntax, die ich habe, korrekt sein sollte. Kann jemand meinen Fehler sehen?


Update: Ich verwende den LuceneQParser. Es analysiert die Filterabfrage oben als

-type_id:A content:['' TO *] 

Es analysiert die Filterabfrage in den Kommentaren vorgeschlagen (-type_id:A OR (content:[* TO *] AND type_id:A)) als

-type_id:A (+content:[* TO *] +type_id:A) 

so keine Ergebnisse.

+0

was wollen Sie erreichen ?? type_id nicht A ODER alle Dokumente ohne Inhalt oder Inhalt? – Jayendra

+0

@Jayendra Siehe den ersten Satz meiner Frage: keine Beschränkung für Dokumente, die nicht type_id = A; Wenn sie type_id = A sind, sollten sie einen Inhalt ungleich null haben. Ich habe zum Beispiel auch versucht, 'fq = ((type_id: (A) AND content: (['' TO *])) ODER type_id: (*))', aber immer noch kein Glück. – Kimberly

+1

Können Sie versuchen, fq = -type_id: A ODER (Inhalt: [* TO *] UND type_id: A) – Jayendra

Antwort

11

Die Negation braucht einen kompletten Satz dagegen entsprechen, so sollten Sie Ihre Filter sein:

fq=((*:* AND -type_id:A) OR content:(['' TO *])) 
Verwandte Themen