使用节点(*)进行neo4j查询性能调优

使用节点(*)进行neo4j查询性能调优,neo4j,cypher,Neo4j,Cypher,我已经添加了具有“nodetype”属性的节点,并且只想查询特定类型的节点。例如,我有一个“场馆”节点类型,它是世界各地场馆的列表。每个场馆都有一个:IN_区域,它将场馆与一个城市连接起来,然后还有一个:IN_区域一直延伸到全国。因此: venue-[:IN_REGION]->city-[:IN_REGION]->province-[:IN_REGION]->country 我正在对场馆进行模糊搜索,需要搜索上面的任何一个,并返回一个字符串,将上面的所有内容连接起来。我希望在

我已经添加了具有“nodetype”属性的节点,并且只想查询特定类型的节点。例如,我有一个“场馆”节点类型,它是世界各地场馆的列表。每个场馆都有一个:IN_区域,它将场馆与一个城市连接起来,然后还有一个:IN_区域一直延伸到全国。因此:

venue-[:IN_REGION]->city-[:IN_REGION]->province-[:IN_REGION]->country
我正在对场馆进行模糊搜索,需要搜索上面的任何一个,并返回一个字符串,将上面的所有内容连接起来。我希望在Neo4j上执行此操作,而不是在后端服务器上。b对此运行的理想查询是什么?我有以下资料:

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
开始地点=节点(*)
WHERE-vention.nodetype!='地点'
有场地
匹配p=addresscity-[r2?:在\地区]->prov-[r3?:在\地区]->国家/地区
将vention.name+'、'+address.streetAddress+'、'+city.name+'、'+prov.name+'、'+country.name用作搜索
其中toSearch=~“*查询\字符串。*”
返回搜索
限制30
其中QUERY_STRING是模糊搜索字符串。我最想知道的是节点(*)和在末尾有查询-这会梳理每个节点吗?另外,有些关系是可选的,返回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
start vention=node:vention\u index('name:*QUERY\u STRING*'))
匹配地址城市-[?:在\地区]->prov-[?:在\地区]->国家/地区
将vention.name+'、“+address.streetAddress+”、“+city.name+”、“+coalesce(prov.name?,”)+”、“+coalesce(country.name?,”)作为搜索返回
开始城市=节点:城市索引('name:*查询字符串*'))
匹配地址城市-[?:在\地区]->prov-[?:在\地区]->国家/地区
将vention.name+'、“+address.streetAddress+”、“+city.name+”、“+coalesce(prov.name?,”)+”、“+coalesce(country.name?,”)作为搜索返回
和类似的查询地址,prov,country。在2.0中,可以将这些结果合并在一起