2014-04-24 6 views
8

Ich muss alle Dokumente in meiner Sammlung finden, für die die Länge eines bestimmten Feldes eine bestimmte Grenze überschreitet. Der Feldtyp ist eine Zeichenfolge. Gibt es eine Funktionsabfrage, die die Länge eines Zeichenfolgenfeldes in Solr zurückgibt?String Längenfunktion Abfrage in Solr

Antwort

24

Die Lösung besteht darin, die Regex-Funktionen von Solr zu verwenden. Zum Beispiel ruft die folgende Abfrage alle Dokumente, für die das title Feld zumindest 42:

title:/.{42}.*/ 
+0

Ich habe ein Dokument, das "Beschreibung" Feld ist 292 Zeichen und 28 Wörter (die größte Beschreibung in der Sammlung), aber irgendwie, wenn ich abfrage 'description: /. {71}. * /' Gibt es 0 Ergebnisse und Abfragen Beschreibung: /. {70}. */'gibt mein Dokument zurück ... was fehlt mir? –

+0

@joey, was ist der Typ des Feldes? – snakile

+0

org.apache.solr.schema.TextField –

2

Abfrage nach Länge wird nicht standardmäßig unterstützt, die sinnvollste Möglichkeit wäre, ein separates (numerisches) Feld zu erstellen und nach diesem Feld abzufragen.

+0

Also muss ich mein Schema, um so zu tun, ändern? Dies ist eine einmalige Sache, die ich tun muss. Ist es am besten, ein Längenfeld zu definieren und es dann wegzuwerfen? – snakile

+2

Wenn es eine einmalige Sache ist, können Sie [über alle Dokumente iterieren] (http://stackoverflow.com/questions/5051460/solr-solrj-how-to-iterate-results-without-creating-a-giant- Arraylist) und führen Sie die Verarbeitung manuell durch. – mindas

+0

+1, weil Ihre Lösung funktioniert und völlig in Ordnung ist, aber ich denke, ich habe eine einfachere gefunden. Siehe meinen Beitrag. – snakile