2012-11-18 28 views
24

Có thể chạy truy vấn cypher phân biệt chữ hoa chữ thường trên neo4j không?Chạy truy vấn cypher phân biệt chữ hoa chữ thường

Hãy thử rằng: http://console.neo4j.org/

Khi tôi gõ vào đây:

start n=node(*) 
match n-[]->m 
where (m.name="Neo") 
return m 

nó sẽ trả về một hàng. Nhưng khi tôi nhập vào điều này:

start n=node(*) 
match n-[]->m 
where (m.name="neo") 
return m 

nó không trả lại bất kỳ điều gì; bởi vì tên được lưu dưới dạng "Neo". Có cách nào đơn giản để chạy các truy vấn không phân biệt chữ hoa chữ thường không?

Trả lời

34

Vâng, bằng cách sử dụng trường hợp biểu thức thông thường không nhạy cảm:

WHERE m.name =~ '(?i)neo' 

http://neo4j.com/docs/developer-manual/current/cypher/clauses/where/#where-case-insensitive-regular-expressions

+2

Liên kết đã chết. Nó được chuyển sang [http://neo4j.com/docs/developer-manual/current/#query-general] (http://neo4j.com/docs/developer-manual/current/#query-general). Mặc dù câu trả lời của bạn chứa giải pháp, sẽ tốt hơn nếu bạn cập nhật liên kết cho ai đó có thể sẽ nhấp vào liên kết đó. – Gandalf

+0

= ~ toán tử không sử dụng chỉ mục – Abhi

+1

làm cách nào tôi có thể chuyển tham số tại đây? ''(? i) $ param'' và'' (?!) '+ $ param' không hoạt động – vladkras

7

Một cách khác sẽ là:

WHERE LOWER(m.Name) = LOWER("Neo") 

Và nếu bạn đang sử dụng Client Neo4j (NET):

Client.Cypher.Match("(m:Entity)") 
    .Where("LOWER(m.Name) = LOWER({name})") 
    .WithParam("name", inputName) 
    .Return(m => m.As<Entity>()) 
    .Results 
    .FirstOrDefault(); 
+0

Giải pháp này dễ áp ​​dụng hơn cho tham số – thangdc94