2016-03-29 12 views
2

Varlık ve Addess düğümü arasında bir ilişki var. Varlık, eid üzerinde benzersiz bir anahtar kısıtlamaya sahiptir ve Adres, adresKonumunda benzersiz anahtar kısıtlamaya sahiptir. Varlık ve Adres için milyonlarca düğümüm var. Tam Arama yapmak sorgu çalışıyor ve burada sorgusu - Dizine eklenmiş özelliklere göre arama yapmak daha fazla zaman alıyor Neo4j

match(e:Entity)-[r]->(a:Address) where a.addressLocation="ABC XYZ" return r 

Ama arama sorgusu gibi

ReadTimeOutException yol çok fazla zaman ayırdığınız. İşte sorgusu -

match(e:Entity)-[r]->(a:Address) where a.addressLocation=~".*(?i)ABC XYZ.*" return r 

herkes i kesin arama sonucu olarak olarak hızlı arama sonuç gibi olsun ne yapması gerektiğini söyleyebilir. İlk sorgulama (Address.addressLocation üzerine) bir dizin arama kullanan

cevap

1

:

match(e:Entity)-[r]->(a:Address) where a.addressLocation="ABC XYZ" return r 

ikinci sorgu bu nedenle çok ölçülebilir olmayan dizin kullanmak mümkün değildir ve normal bir ifade kullanıyor:

match(e:Entity)-[r]->(a:Address) where a.addressLocation=~".*(?i)ABC XYZ.*" return r 

Cypher üç dize karşılaştırma operatörü STARTS WITH, ENDS WITH ve CONTAINS'a sahiptir. STARTS WITH bir dizin kullanılması bu nedenle bu sorgu performant olmalıdır yapacaktır:

MATCH (e:Entity)-[r]->(a:Addres) 
WHERE a.addressLocation STARTS WITH "ABC XYZ" 
RETURN r 

ENDS WITH ve CONTAINS (İstediğin gerçekten olan) şu anda bir dizin kullanır ancak Neo4j 3.0 hem de, bir dizin kullanmayın. Denemek isterseniz, 3.0 kullanılabilir on the download page bir kilometre taşı sürümü var.

+0

Teşekkürler William, gerçekten yardımcı olur. – RCS

+0

Neo4j 3.0 kararlı makarası ne zaman kullanıma sunulacak? – RCS

İlgili konular