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.