0

パフォーマンスが非常に悪い(約30秒)Cypherクエリがあります:

START foo=node:foos('Name:*')
MATCH foo<-[:HasMember]-()<-[:PartOf]-()<-[:Connected]-bar
WHERE foo.Name IN ["name1", "name2"] AND bar.Enabled = true
RETURN DISTINCT bar.Guid AS Guid, foo.Name AS Name

何が起こっているのかと思うのは、Luceneインデックスを使用してすべての値を引き出し、グラフ検索を使用してセット内の名前と照合することです。クエリを以下の名前に変更すると、桁違いに高速になるためです。 (16ミリ秒):

START foo=node:foos('Name:"name1" OR Name:"name2"')
MATCH foo<-[:HasMember]-()<-[:PartOf]-()<-[:Connected]-bar
WHERE bar.Enabled = true
RETURN DISTINCT bar.Guid AS Guid, foo.Name AS Name

名前セットからLuceneクエリを手動で作成することなく、最初のクエリを2番目のクエリと同じ速さで実行する方法はありますか?

他のオプションはトラバーサルを使用することですが、可能であればサイファーランドにとどまるのが好きです。

4

1 に答える 1

3

Maybe if you don't want to build the query, try filtering earlier? Like

START foo=node:foos('Name:*')
WHERE foo.Name IN ["name1", "name2"]
WITH foo
MATCH foo<-[:HasMember]-()<-[:PartOf]-()<-[:Connected]-bar
WHERE bar.Enabled = true
RETURN DISTINCT bar.Guid AS Guid, foo.Name AS Name
于 2013-03-12T09:36:34.117 に答える