try this

MATCH (topic:attribute) WHERE id(topic) IN [37, 38]

> MATCH p = (topic)-[rel: describedBy*0..4]-(node: attribute

where none(n IN nodes(p)[..-1] where n.key = "enrichment" OR n.key =
> "classification")

RETURN p;


The problem is I want to remove paths where any of the nodes in the path
(other than the end node) have the property "key" with either the value
"enrichment" or "classification".

On Tue, Nov 18, 2014 at 6:46 PM, Gabriel Bassett <
[email protected]> wrote:

> I am having trouble creating an appropriate Cypher query. I would like to
> return the sub-graph of all edges & nodes within a certain distance of a
> topic node. This could easily be done with something like:
>>
>> START (topic: attribute)-[rel: describedBy*0..4]-(node: attribute
>
> WHERE id(topic) IN [37, 38]
>
> RETURN rel;
>
> The problem is I want to remove paths where any of the nodes in the path
> (other than the end node) have the property "key" with either the value
> "enrichment" or "classification".
>
> I've tried removing paths using:
>
>> MATCH path=(topic: attribute)-[rel:
>> describedBy|influences*0..4]-(intermediate: attribute)-[rel:
>> describedBy|influences*0..4]-(node: attribute)
>> WHERE id(topic) IN [37,38] AND NOT intermediate in [x IN nodes(path)
>> WHERE x.key IN ['enrichment', 'classification'] | x] and length(path) < 5
>> RETURN rel;
>
>
> I've tried filtering at each potential distance in the path:
>
>> MATCH (topic: attribute)-[rel:describedBy|influences]-(node: attribute)
>> WHERE id(topic) IN [37,38]
>
> RETURN rel as rels
>> UNION
>> MATCH path=(topic: attribute)-[rel:
>> describedBy|influences*1]-(intermediate: attribute)-[rel:
>> describedBy|influences*1..3]-(node: attribute)
>> WHERE id(topic) IN [37,38] AND NOT intermediate.key in ['enrichment',
>> 'classification'] and length(path) < 5
>
> RETURN rel as rels
>> UNION
>> MATCH path=(topic: attribute)-[rel:
>> describedBy|influences*2]-(intermediate: attribute)-[rel:
>> describedBy|influences*1..2]-(node: attribute)
>> WHERE id(topic) IN [37,38] AND NOT intermediate.key in ['enrichment',
>> 'classification'] and length(path) < 5
>
> RETURN rel as rels
>> UNION
>> MATCH path=(topic: attribute)-[rel:
>> describedBy|influences*3]-(intermediate: attribute)-[rel:
>> describedBy|influences*1..1]-(node: attribute)
>> WHERE id(topic) IN [37,38] AND NOT intermediate.key in ['enrichment',
>> 'classification'] and length(path) < 5
>
> RETURN rel as rels;
>
>
> I was hoping the 2nd match would stop paths that go
> (37)-[rel]-(32)-[rel*0..3]-(), where 32 has 'key':'enrichment', however it
> does not.
>
> Does anyone have any suggestions how I could formulate a query to stop
> following a path when it reaches a node with a specific key:value pair?
>
> Thank you for the help.
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Neo4j" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Neo4j" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to