検索を行いたいので、2つのラベル(OR条件)からトラバースを開始したいと考えています。たとえば、「Male」または「Female」のラベルを持ち、プロパティがname =〜 'であるすべてのノードを見つける必要があります。 ail。 '。Neo4j:複数のラベルに一致する(2以上)
答えて
あなたはWHERE
句でそれを置くことができます:@tbaumこれはAllNodesScan
を行い指摘するように
MATCH n
WHERE n:Male OR n:Female
RETURN n
EDIT
。私はラベルがかなり新しいだったときの答えを書き、それが単一ラベルケース
MATCH n
WHERE n:Male
RETURN n
の場合と同様に、クエリプランナは、最終的に私はまだ、これは合理的な表現だと思う、各ラベルについてNodeByLabelScan
でそれを実装すると予想しましたクエリープランナーがラベルスキャンでそれを実装することを期待するのは妥当であるが、Neo4j 2.2.3ではクエリーはまだAllNodesScan
とラベルフィルターで実装されています。したがって、より冗長な選択肢があります。ラベル結合は集合体を意味し、この結合体はさまざまな方法で表現できるため、クエリプランナがすべてのノードをスキャンせずに実装し、ラベルごとにNodeByLabelScan
で始まるように表現できます。
MATCH (n:Male)
WHERE n.name =~ '.ail.'
RETURN n
UNION MATCH (n:Female)
WHERE n.name =~ '.ail.'
RETURN n
これは、各ラベルに一度クエリを表現し、明示的なUNION
とそれらを結ぶことを意味します。これは少なくともラベルの数が少なくても不合理ではありませんが、クエリープランナーがより単純なクエリから同じ実装を推論できないようにすべき理由はわかりません。hereを開いています。
MATCH n WHERE n:Label1 OR n:Label2
...これは、悪い考えであるAllNodesScanになります!
多分よりよい解決策:v3.0のための
OPTIONAL MATCH (n1:Label1)
WITH collect(distinct n1) as c1
OPTIONAL MATCH (n2:Label2)
WITH collect(distinct n2) + c1 as c2
OPTIONAL MATCH (n3:Label3)
WITH collect(distinct n3) + c2 as c3
UNWIND c3 as nodes
RETURN count(nodes),labels(nodes)
なぜ、それぞれのステップで "別個"が必要ですか? –
'AllNodesScan'を指摘してくれてありがとう、私は今それが解決されていると思った。私は自分の答えを更新しました。あなたは 'UNION 'を使って私のより冗長な選択肢について、そしてあなたの' OPTIONAL MATCH'/'collect()'/'UNWIND'とどのように比較するかについて考えていますか? – jjaderberg
1つの注記:UNIONは、現時点では(2つの理由で)不便です(場合によっては使用できません)。2)UNIONの結果を処理することはできません。たとえば、SKIP/LIMITまたはCOUNTは使用できません。 –
ドキュメントはこのことを言う:
を一つでも複数のラベルを持つノード記述することができます。
(a:User:Admin)-->(b)
出典:https://neo4j.com/docs/developer-manual/current/cypher/#_labels
答えは正確ではありませんが、完全に悪くないわけではありません。著者は質問に関係を含めるのを忘れてしまいましたが、複数のノードラベルを照合する目的で動作します: 'MATCH(a:User:Admin) r]→(b)return a、r、b' – artemisian
FYI。ソースURLが少し変更されました。これは新しいものです:https://neo4j.com/docs/developer-manual/current/cypher/syntax/patterns/#_labels – Chad
実際には、これは間違っています(a:User:Admin)。このクエリは、ノード"ユーザーと管理者"です。ユーザーまたは管理者はいません。 –
- 1. neo4j内の異なるラベルに対して複数の一致がある単一ノードを返す方法は?
- 2. neo4jは0以上の関係が2番目の関係で終わるパスに一致します
- 3. Neo4j:適時に複数の関係と一致
- 4. Neo4jオプションの一致
- 5. Neo4J Cypher:複数のプロパティの一致とリレーションシップの作成
- 6. Neo4jの一致パス特定のラベルを持つノードを除外
- 7. SQL:2つ以上の一致を含むレコードを返す
- 8. 春データのNeo4j - 引数型が一致
- 9. Neo4jのプロパティタイプの一致
- 10. Globを使用して2つ以上のファイルに一致する
- 11. Prolog:1つ以上の匿名変数を一致させる
- 12. Neo4Jインポートツールの不一致
- 13. 2列以上の重複
- 14. neo4jの配列間で一致する
- 15. 正規表現は、1桁以上の数字に一致するように
- 16. 複数の行を選択する4つ以上の条件に一致する箇所
- 17. 複数のプロパティに一致するNSPredicate
- 18. StackDriver - 1分に一致するX行以上のシンプルなログアラート
- 19. 2つ以上の要素が一致する正規表現Java
- 20. 複数の(2つ以上の)数値の最大公約数
- 21. Neo4jのノード上のラベルを削除するには?
- 22. 2つ以上の一意の列エントリに一致するキーを見つける方法は?
- 23. 複数行に一致するREGEX
- 24. キャプチャグループに1回以上一致する正規表現
- 25. Neo4j-cypherクエリーでの複数の一致ステートメント(if else条件付き)
- 26. 複数のregExの一致
- 27. 一致する複数の値のmysql
- 28. NSDateに複数分の数字(2分以上)を変換する
- 29. は、一列、複数行に挿入 - サブクエリが1以上行
- 30. codenameoneでコンテナの中央に2つ以上のラベルを表示するには
これを行うための方法はありますか?例えば、関係のために '(n) - [:rel1 | rel2] - >(m) 'どこで' | 'は' OR'を示します –
いいえ、あなたはそのパターンをラベルに使うことはできません。もっと短いパターンや 'WHERE'句なしで動作するパターンは認識していません。 Neo4j [githubリポジトリ](https://github.com/neo4j/neo4j/issues)で機能リクエストを送信してください。 – jjaderberg
@Lyman Zerga私はまた、多くの場所で検索しましたが、そのようなものはありません –