簡體   English   中英

neo4j使用node(*)查詢性能調整

[英]neo4j query performance tuning with node(*)

我添加了具有“ nodetype”屬性的節點,並且只想查詢某種類型的節點。 例如,我有一個“ venue”節點類型,它是世界各地場所的列表。 每個場所都有一個:IN_REGION將該城市鏈接到一個城市,然后一直有一個:IN_REGION到整個國家。 所以:

venue-[:IN_REGION]->city-[:IN_REGION]->province-[:IN_REGION]->country

我正在場地上執行模糊搜索,因此需要在以上任何位置上進行搜索,並返回包含以上所有內容的字符串。 我想在Neo4j上而不是在后端服務器上這樣做。 在此基礎上運行的理想查詢將是什么? 我有以下幾點:

START venue=node(*)
WHERE venue.nodetype! ='venue'
WITH venue
MATCH p = address<-[:HAS_ADDRESS]-venue-[r1:IN_REGION]->city-[r2?:IN_REGION]->prov-[r3?:IN_REGION]->country
with venue.name+','+address.streetAddress+','+city.name+','+prov.name+','+country.name as toSearch
WHERE toSearch=~ ".*QUERY_STRING.*"
return toSearch
LIMIT 30

其中QUERY_STRING是模糊搜索字符串。 我最想知道的是node(*)並在查詢末尾-這是否會遍歷每個節點? 此外,某些關系是可選的,並且返回null-我該如何處理?

任何幫助是極大的贊賞!

您基本上是在告訴它掃描整個數據庫以查找場所節點(一個很好的優化方法是為節點類型或只是場所節點創建索引,然后進行掃描),然后遍歷所有場所的地址/城市/等,然后將這些地址與搜索字符串進行比較。 您的限制不會對您的性能有多大幫助,除非您的數據庫很小,否則它將令人發臭。 您有幾個場地? 無論如何,您都可以考慮以下內容:

start venue=node:venue_index('name:*QUERY_STRING*')
match address<-[:HAS_ADDRESS-venue-[:IN_REGION]->city-[?:IN_REGION]->prov-[?:IN_REGION]->country
return venue.name + ',' + address.streetAddress + ',' + city.name + ',' + coalesce(prov.name?, '') + ',' + coalesce(country.name?, '') as toSearch

start city=node:city_index('name:*QUERY_STRING*')
match address<-[:HAS_ADDRESS-venue-[:IN_REGION]->city-[?:IN_REGION]->prov-[?:IN_REGION]->country
return venue.name + ',' + address.streetAddress + ',' + city.name + ',' + coalesce(prov.name?, '') + ',' + coalesce(country.name?, '') as toSearch

和類似的查詢,以解決,省,國家。 在2.0中,您可以將這些結果結合在一起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM