FYI - This is using Neo4j 2.1.2 personal enterprise

On Thursday, June 26, 2014 9:32:10 AM UTC-6, Eric Olson wrote:
>
> I have run into a unique situation (bug?). Here is my query that does what 
> it is supposed to:
>
> MATCH
>    (:Author {name: {author} })-[:WROTE_BOOK]->(b:Book {name_min: {book} 
> })-[:HAS_CHAPTER]->(c:Chapter {chapter: {chapter} })-[:HAS_TEXT]->(t:Text
> ),
>    (lang:Language {language: {lang} }),
>    (version:Version {version_min: {version} })
> USING INDEX b:Book(name_min)
> OPTIONAL MATCH (user:User {name: {user} })-[user_likes:LIKES]->(c)
> WHERE (lang)<-[:IN_LANGUAGE]-(t)-[:IN_VERSION]->(version)
> RETURN
>    b.name AS book,
>    b.name_min AS book_min,
>    c.chapter AS chapter,
>    t.text AS text,
>    c.id AS id,
>    count(user_likes) > 0 AS user_likes
>
>
> Think of this as a system for adding a social layer on top of text books 
> where users can like various chapters, books, and/or authors.
>
> What I am doing here is returning the text from a chapter and using an 
> OPTIONAL MATCH for the user to see how many :LIKE relationships they have 
> to this chapter so I can indicate if they already have liked it. Now this 
> is all great, but the running time on this is about 46ms. So I added an 
> index hint to the query like:
>
> MATCH
>    (:Author {name: {author} })-[:WROTE_BOOK]->(b:Book {name_min: {book} 
> })-[:HAS_CHAPTER]->(c:Chapter {chapter: {chapter} })-[:HAS_TEXT]->(t:Text),
>    (lang:Language {language: {lang} }),
>    (version:Version {version_min: {version} })
> USING INDEX b:Book(name_min)
> OPTIONAL MATCH (user:User {name: {user} })-[user_likes:LIKES]->(c)
> USING INDEX user:User(name)
> WHERE (lang)<-[:IN_LANGUAGE]-(t)-[:IN_VERSION]->(version)
> RETURN
>    b.name AS book,
>    b.name_min AS book_min,
>    c.chapter AS chapter,
>    t.text AS text,
>    c.id AS id,
>    count(user_likes) > 0 AS user_likes
>
> Now the running time is less than 4ms! Blazing fast! But I only get the 
> right b.name, b.name_min, c.chapter, and t.text. The c.id is the wrong 
> and the user_likes is always 1+ (assuming they have liked at least one 
> chapter somewhere. So what is happening is that the optional match is not 
> using the 'c' variable from the MATCH above correctly as it seems to be 
> viewing c as a wildcard match. What is most interesting is that if it were 
> matching all chapters a user like, then count(user_likes) should be 30 in 
> my test case. But it is still counting only 1 -- the wrong 1 though.
>
> How does adding the USING INDEX line mess this up? Any ideas?
>
>

-- 
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