Was reguläre Ausdrücke Funktionen unterstützt Solr edismax?
Reguläre Ausdrücke können für die pattern-matching-syntax unten.
Ich bin versucht zu implementieren eine leistungsstarke such-tool implementiert, dass so viele von diesen wie möglich.
Ich sagte, dass edismax ist das flexibelste Werkzeug für den job.
Die von der pattern-matching-Ausdrücke unten kann erreicht werden, mit edismax? Kann ich etwas besseres tun, als edismax? Können Sie vorschlagen, welche Filter und parser-patches, die ich verwenden könnte, um die Arbeit zur Erreichung dieser Funktionalität? Bin ich träumen, wenn ich denke, Solr erreichen akzeptable performance (D. H. server-side processing time) dieser Art von sucht?
syntax für reguläre Ausdrücke & Beispiele aus mysql
- ^ Anfang der Zeichenkette.
'fofo' REGEXP '^fo' => true
- $ match-Ende der Zeichenkette.
'fo\no' REGEXP '^fo\no$' => true
- * 0-unbegrenzt wildcard.
'Baaaan' REGEXP 'Ba*n' => true
- ? 0-1 wildcard.
'Baan' REGEXP '^Ba?n => false'
- + 1-unbegrenzt wildcard.
'Bn' REGEXP 'Ba+n' => false
- | oder.
'pi' REGEXP 'pi|apa' => true
- ()* Sequenz übereinstimmen.
'pipi' REGEXP '^(pi)*$' => true
- [a-dX], [^a-dX] Zeichen range/set
'aXbc' REGEXP '[a-dXYZ]' => true
- {n} oder {m,n} Kardinalität notation
'abcde' REGEXP 'a[bcd]{3}e' => true
- [:character_class:]
'justalnums' REGEXP '[[:alnum:]]+' => true
InformationsquelleAutor ted.strauss | 2012-02-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Version 4.0 von Lucene unterstützt regex-Abfragen direkt in der standard-Abfrage-parser über spezielle syntax. Ich habe überprüft, dass es funktioniert auf eine Instanz von Solr läuft bei mir, gebaut aus dem subversion-trunk im Februar.
Jira ticket 2604 beschreibt die Erweiterung der standard-Abfrage-parser über spezielle regex-syntax, mit Hilfe der vorwärts-Schrägstriche zum trennen der regex-ähnliche syntax in Javascript. Es scheint mit der zugrunde liegenden RegexpQuery parser.
Also ein kurzes Beispiel:
passen auf eine fünfstellige Postleitzahl in den Korpus habe ich indiziert. Aber, seltsam, Körper:/\d{5}/funktionierte nicht für mich, und^, scheiterte auch.
Den regex-Dialekt würde Java sein, aber ich bin nicht sicher, ob alles funktioniert, da habe ich nur eine oberflächliche Prüfung. Hätte man wohl, um sich sorgfältig auf die RegexpQuery code zu verstehen, was funktioniert und was nicht.
Habe gerade versucht
\d{4}
in Solr 4.0 auf einem string-Feld. Es funktioniert nicht. Sieht aus wie wir nur können[0-9]{4}
. Aber ich denke, ^ ist auch nicht nötig, da jede Abfrage, wie/[0-9]{5}/
ist eigentlich äquivalent zu dem Perl-Kompatible RegEx/^[0-9]{5}$/
also nicht über.*
als Präfix bedeutet, Sie zwingen das Spiel aus dem ersten char.Beide links, die du gepostet hast sind nun tot.
Das Lucene-Projekt verlegt den javadocs. Einige Ihre eigenen links sind gebrochen zu werden. Versuchen Sie diese links aktualisiert: RegExp und RegexpQuery
ElasticSearch hat eine eine gute übersicht über die query-syntax
InformationsquelleAutor Ronald Wood
Reguläre Ausdrücke und (e)dismax sind nicht wirklich vergleichbar. Dismax gemeint ist, um zu arbeiten direkt mit gängigen end-user-input, während die regulären Ausdrücke sind nicht typische end-user-input.
Auch, matching mit regulären Ausdrücken -, wie die Dinge mit dismax hängt weitgehend davon ab, text-Analyse-Einstellungen und schema-design, nicht auf dismax selbst. Mit Solr Sie in der Regel passen Sie die schema -, und text-Analyse auf die konkret suchen müssen, vielleicht tut viel von der Arbeit am index-Zeit. Reguläre Ausdrücke sind an der Verschiedenheit mit dieser und auch mit der grundlegenden Struktur von Lucene invertierte Indizes.
Immer noch, Lucene bietet RegexQuery und die neuere RegexpQuery. Soweit ich weiß, sind diese nicht integriert Solr, aber Sie könnten es werden. Starten Sie ein neues Element in der Solr issue-tracker und happy coding! 🙂
Beachten Sie, dass die regex-Abfragen werden wahrscheinlich immer langsam... aber Sie hätte eine akzeptable Leistung in Ihrem Fall.
InformationsquelleAutor Mauricio Scheffer