2016-08-08 10 views
0

Wie kann ich bei Verwendung der folgenden Regexp-Abfrage das Sonderzeichen (') im Schlüsselwort umgehen? Ich kann nicht finden, wo ich die Sequenz platzieren soll.Wie kann ich bei Verwendung der folgenden Regexp-Abfrage das Sonderzeichen im Schlüsselwort umgehen?

WITH ["Freda's"] AS keywords 
WITH REDUCE(s = [], x IN keywords | s + ('(?i).*' + x + '.*')) AS regexps 
MATCH (p:Product) 
WHERE all(x IN regexps WHERE p.name =~ x) 
RETURN p 
+0

Es scheint nicht so, aber wenn das die Lösung wäre, wo würde das in der Abfrage platziert werden? –

+1

Könnten Sie bitte präzisieren, was mit dem Code nicht stimmt? Was ist der Input und was erwartet Output? Auch wenn es Java ist, denke ich, dass du '' 'durch' \ u0022' ersetzen kannst. –

+0

Sicher. Ich habe Produktnamen, die Arrays sind. Einige der Werte in den Arrays können Sonderzeichen wie (') enthalten. Wenn ich den Produktnamen wie in der obigen Abfrage als Schlüsselwort eingeben, wird kein Ergebnis zurückgegeben, wenn der Name ein Sonderzeichen enthält. Ich kann nur Produktnamen abfragen, die kein Sonderzeichen wie (') haben. Ich frage mich also, wie kann ich dem Sonderzeichen oder der entsprechenden Syntax entkommen, so dass ich einen Produktnamen abfragen kann, der ein Sonderzeichen enthält, insbesondere (')? –

Antwort

0

Ihre Cypher Abfrage funktioniert wie geschrieben, so ist dies wahrscheinlich ein Problem mit, wie Sie Ihre Programmiersprache verwenden die Strings in der WITH Klausel zu generieren.

In der Praxis sollten Sie das keywords Array auf die Weise nicht passieren, die Sie gezeigt haben, wie auch immer. Ein performanterer und sicherer Ansatz (der auch dazu beitragen kann, Ihr Problem zu umgehen) wäre, das Array als parameter weiterzuleiten. Der Parameterwert wäre nur ein natives Array in der von Ihnen verwendeten Sprache.

Wenn Sie das keywords Array als Parameter übergeben, Ihre Abfrage wäre:

WITH REDUCE(s = [], x IN {keywords} | s + ('(?i).*' + x + '.*')) AS regexps 
MATCH (p:Product) 
WHERE ALL(x IN regexps WHERE p.name =~ x) 
RETURN p; 

By the way, sind Sie sicher, dass Sie ALL() statt ANY() verwenden möchten?

+0

Danke. Ja, ich bin mir sicher über ALL(). Mein Problem ist, wenn ich einen Produktnamen ["fredas"] habe, kann ich das gut zurückbekommen, aber wenn ich den Produktnamen ["Fredas"] habe, kann ich es überhaupt nicht zurückbekommen. Das ist mein Problem. –

+0

Ja, das verstehe ich. Welche Sprache verwenden Sie und wie verwenden Sie sie, um den Cypher-Code zu generieren, den Sie auszuführen versuchen? Sie müssen sicherstellen, dass Sie die Schlüsselwortzeichenfolgen ordnungsgemäß generieren und Parameter anstelle der Klausel 'WITH' verwenden. – cybersam

+0

JSON, jedoch versuche ich die Abfrage im Neo4j-Browser. Ich weiß, dass wir keine Fragen innerhalb einer Frage stellen sollen, aber wie kann ich einen Parameter anstelle der WITH-Klausel verwenden? –

Verwandte Themen