Do you have a test-dataset somewhere?

0. what neo4j version do you use?
1. I would probably use only one indexed date property for 
StoreCustomerTransaction (you have a typo in the label)
2. you don't need empty matches
3. don't include (s) in your intermediate WIHT if you don't use it later
4. switch the START clause to a MATCH (c) WHERE id(c) = 84531
5. your arrow in the WHERE from customer was wrong 
(:TransactionLineItems)-[:BasketContained]->(c)

MATCH (c)-[:BasketContained]->
        (:TransactionLineItems)
                -[:IsOneOf]->
        (s:StoreItem)
                <-[:IsOneOf]-
        (tl:TransactionLineItems)
                <-[:BasketContained]-
        (m:StoreCutomerTransaction)
WHERE  m.date = "2015-10-29" and id(c) = 84531
WITH distinct m, c
Match 
(m)-[:BasketContained]->(:TransactionLineItems)-[:IsOneOf]->(RecomendedItems:StoreItem)
WHERE NOT 
exists((RecomendedItems)-[:IsOneOf]->(:TransactionLineItems)<-[:BasketContained]-(c))
RETURN RecomendedItems.ItemName, COUNT(*) AS CountRecomendedItems
Order by CountRecomendedItems desc
LIMIT 10;


there is also a trick you can do, to speed up the NOT EXISTS check

MATCH (c)-[:BasketContained]->(:TransactionLineItems)-[:IsOneOf]->(s:StoreItem)
WHERE id(c) = 84531
WITH c, collect(s) as storeItems, reduce(a = "-", id in collect(id(s)) | a + id 
+ "-") as ids
UNWIND storeItems as s
MATCH (s)<-[:IsOneOf]-
        (tl:TransactionLineItems)
                <-[:BasketContained]-
        (m:StoreCutomerTransaction)
WHERE m.date = "2015-10-29"
WITH distinct m, c, ids
Match 
(m)-[:BasketContained]->(:TransactionLineItems)-[:IsOneOf]->(RecomendedItems:StoreItem)
WHERE NOT ids CONTAINS toString(id(RecomendedItems))
RETURN RecomendedItems.ItemName, COUNT(*) AS CountRecomendedItems
Order by CountRecomendedItems desc
LIMIT 10;


Please try it and let me know.


> Am 30.03.2016 um 21:14 schrieb Grant <[email protected]>:
> 
> Hi All, 
> 
> So here is the senario,
> 
> 1. Customer A places items into his/her basket
> 2. Other customers place items into their baskets.
> 3. Find the items in the "other" baskets that are not in customer A's basket
> 
> Everything seems find until the point where i need to filter out customer A's 
> items.
> 
> 
> START c = node(84531)
> MATCH (c)-[:BasketContained]->
>               (:TransactionLineItems)
>                       -[:IsOneOf]->
>               (s:StoreItem)
>                       <-[:IsOneOf]-
>               (tl:TransactionLineItems)
>                       <-[:BasketContained]-
>               (m:StoreCutomerTransaction)
>       WHERE   
>               m.Month = 10 
>               and m.Year = 2015 
>               and m.Day = 29
> WITH distinct s, m, c
>               Match (m)
>                       -[:BasketContained]->
>               (:TransactionLineItems)
>                       -[:IsOneOf]->
>               (RecomendedItems:StoreItem)
> WITH RecomendedItems, c
> MATCH (RecomendedItems)
> MATCH (c)
> WHERE NOT 
> exists((RecomendedItems)-[:IsOneOf]->(:TransactionLineItems)-[:BasketContained]->(c))
> RETURN RecomendedItems.ItemName, COUNT(RecomendedItems.ItemName) AS 
> CountRecomendedItems
> Order by CountRecomendedItems desc
> 
> Any help would be appreciated.
> 
> -- 
> 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] 
> <mailto:[email protected]>.
> For more options, visit https://groups.google.com/d/optout 
> <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