Hi all,

I'm still stuck here :( . Not sure what it means that I haven't received 
any suggestions. Is there no possibility to do this in a single query or is 
the question not clear?

Best,

Tom

On Wednesday, 25 June 2014 14:39:42 UTC+2, Tom Zeppenfeldt wrote:
>
> Hi all,
>
> Recently I worked with Michael Hunger on a typical faceted search case, 
> but since we haven't found the holy grail yet, I'm also sharing our 
> findings over here.
>
> The dropboxlink 
> https://www.dropbox.com/s/65rc2sz6p2lrpge/TomZepFacets.tar.gz contains a 
> Neo4j 2.1.2 db with about 6000 random nodes, modeled as follows (the db 
> also contains a :Meta model).  In terms of cardinality each :Datapoint has 
> 1 :HAS_LOCATION and 1 :HAS_PERIOD relationship
> .[image: Inline afbeelding 1] 
> <https://mail.google.com/mail/u/0/?ui=2&ik=cffa13707e&view=att&th=146c0088c0e62770&attid=0.1&disp=emb&realattid=ii_146beff0f2f2d71d&zw&atsh=1>
>
>
>
> When requesting a filtered set of datapoints (with filters applied for a 
> country and a period of time)  I succeeded in getting the counts for one of 
> the facets, but not for both of them in a single cypher.
>
> The current approach is as follows:
> - retrieve all descendants of the filtervalue in the :Poi and  :Period 
> hierarchies, including the filtervalue itself. This results in a set of 
> nodes/leaves 
> - match all  :Datapoint nodes with the descendants. 
>
>
> neo4j-sh (?)$ cypher 2.1.experimental match 
> (poi)<-[:HAS_CHILD*0..]-(poif)<-[:HAS_CHILD*0..1]-(poiq:Poi {name: 
> "Netherlands"})
> > with poi,poif
> > match 
> (period)<-[:HAS_CHILD*0..]-(periodf)<-[:HAS_CHILD*0..1]-(periodq:Period 
> {name: "2014-Q2"})
> > with poif,periodf,poi,period
> > match (poi)<-[hl:HAS_LOCATION]-(dp)-[hp:HAS_PERIOD]->(period)
> > with *poif*.name as fname ,count(distinct dp) as fcount
> > return [fname,fcount] as facets;
> +-----------------------+
> | facets                |
> +-----------------------+
> | ["Overijssel",73]     |
> | ["Drenthe",31]        |
> | ["Utrecht",73]        |
> | ["Gelderland",143]    |
> | ["Flevoland",22]      |
> | ["Netherlands",1089]  |
> | ["Groningen",45]      |
> | ["Noord-Holland",128] |
> | ["Noord-Brabant",185] |
> | ["Limburg",103]       |
> | ["Zuid-Holland",182]  |
> | ["Zeeland",39]        |
> | ["Friesland",65]      |
> +-----------------------+
> 13 rows
> 434 ms
> neo4j-sh (?)$ cypher 2.1.experimental match 
> (poi)<-[:HAS_CHILD*0..]-(poif)<-[:HAS_CHILD*0..1]-(poiq:Poi {name: 
> "Netherlands"})
> > with poi,poif
> > match 
> (period)<-[:HAS_CHILD*0..]-(periodf)<-[:HAS_CHILD*0..1]-(periodq:Period 
> {name: "2014-Q2"})
> > with poif,periodf,poi,period
> > match (poi)<-[hl:HAS_LOCATION]-(dp)-[hp:HAS_PERIOD]->(period)
> > with *periodf*.name as fname ,count(distinct dp) as fcount
> > return [fname,fcount] as facets;
> +------------------+
> | facets           |
> +------------------+
> | ["2014-M05",352] |
> | ["2014-M04",355] |
> | ["2014-Q2",1089] |
> | ["2014-M06",371] |
> +------------------+
> 4 rows
> 327 ms
>
> Please note we had the best results with the Cypher 2.1.experimental that 
> was announced here <http://neo4j.com/blog/neo4j-2-1-graph-etl/> 
>
> My concrete question:
>
> Anyone has got an idea how to construct a cypher that returns counts for 
> both facets (and in fact n facets, since the real case uses 4 hierarchical 
> facets) ?
>
>
>
>
>

-- 
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 neo4j+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to