If you update to 2.1.2 it uses indexes for IN clauses.

And you might be able to do

> match (a:newtags) where a.name IN 
> ["1225","10091","1921056","11962","1921078","1920809","1921090"] 
> match (c:newtags) where c.name IN ["5226","1955"]
> match p = allShortestPaths((a)-[*..2]-(c))
> return count(*)


Use the profile keyword in the neo4j shell to see if it actually uses an index:

like this:

profile
> match (a:newtags) where a.name IN 
> ["1225","10091","1921056","11962","1921078","1920809","1921090"] 
> match (c:newtags) where c.name IN ["5226","1955"]
> match p = allShortestPaths((a)-[*..2]-(c))
> return count(*)
> ;
+----------+
| count(*) |
+----------+
| 0        |
+----------+
1 row

ColumnFilter
  |
  +EagerAggregation
    |
    +ShortestPath
      |
      +SchemaIndex(0)
        |
        +SchemaIndex(1)

+------------------+------+--------+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
|         Operator | Rows | DbHits | Identifiers |                              
                                                                                
                                     Other |
+------------------+------+--------+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
|     ColumnFilter |    1 |      0 |             |                              
                                                                                
                     keep columns count(*) |
| EagerAggregation |    1 |      0 |             |                              
                                                                                
                                           |
|     ShortestPath |    0 |      0 |           p |                              
                                                                                
                                           |
|   SchemaIndex(0) |    0 |      0 |        c, c |                              
                                                        Collection(List({  
AUTOSTRING7}, {  AUTOSTRING8})); :newtags(name) |
|   SchemaIndex(1) |    0 |      7 |        a, a | Collection(List({  
AUTOSTRING0}, {  AUTOSTRING1}, {  AUTOSTRING2}, {  AUTOSTRING3}, {  
AUTOSTRING4}, {  AUTOSTRING5}, {  AUTOSTRING6})); :newtags(name) |
+------------------+------+--------+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------+

You should also pass in your collections as parameters, so the query can be 
built once and then reused

> match (a:newtags) where a.name IN {tags1}
> match (c:newtags) where c.name IN {tags2}
> match p = allShortestPaths((a)-[*..2]-(c))
> return count(*)



Michael

Am 02.07.2014 um 17:10 schrieb jankan99 <[email protected]>:

> Hello, In the 2.1.1 version, when we do the following cypher it takes a long 
> time (more than a minute).  When we do the same query using a "With" clause, 
> it takes about 6 seconds.  We need to get this down to less than a second.  
> We think it is slow because all the nodes "a" and "c" are loaded in memory 
> before filtering is done using the "where" clause.  Is there anyway to force 
> Neo to use the indexes on the "name" property to select only the nodes in the 
> where clause.  We tried USING HINTS but it looks the IN clause is not 
> supported for hints.
> 
> Cyoher that takes more than a minute
> match (a:newtags)-[:belongs_to]-(b)-[:belongs_to]-(c:newtags) 
> where a.name IN 
> ["1225","10091","1921056","11962","1921078","1920809","1921090"] 
> and c.name IN ["5226","1955"]
> return count(distinct(b));
> 
> Cypher using WITH clause takes about 6 seconds  
> match (a:newtags) where a.name IN 
> ["1225","10091","1921056","11962","1921078","1920809","1921090"] 
> with a
> match (a)-[rm1]-(b)-[rm2]-(c:newtags) 
> where c.name IN ["5226","1955"]
> return (count(distinct(b))
> 
> Some stats: 
> The machine has about 2.2 milion nodes.  We are using AWS with 7.5 GB RAM.
> 
> Any help will be appreciated.
> 
> Thank you.
> 
> Raj
> 
> 
> -- 
> 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