You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2017/01/12 13:05:26 UTC
svn commit: r1778430 [1/4] - in /tinkerpop/site/docs/3.2.4-SNAPSHOT:
dev/provider/index.html recipes/index.html reference/index.html
tutorials/getting-started/index.html tutorials/the-gremlin-console/index.html
Author: spmallette
Date: Thu Jan 12 13:05:26 2017
New Revision: 1778430
URL: http://svn.apache.org/viewvc?rev=1778430&view=rev
Log:
Deploy docs for TinkerPop 3.2.4-SNAPSHOT
Modified:
tinkerpop/site/docs/3.2.4-SNAPSHOT/dev/provider/index.html
tinkerpop/site/docs/3.2.4-SNAPSHOT/recipes/index.html
tinkerpop/site/docs/3.2.4-SNAPSHOT/reference/index.html
tinkerpop/site/docs/3.2.4-SNAPSHOT/tutorials/getting-started/index.html
tinkerpop/site/docs/3.2.4-SNAPSHOT/tutorials/the-gremlin-console/index.html
Modified: tinkerpop/site/docs/3.2.4-SNAPSHOT/dev/provider/index.html
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.2.4-SNAPSHOT/dev/provider/index.html?rev=1778430&r1=1778429&r2=1778430&view=diff
==============================================================================
--- tinkerpop/site/docs/3.2.4-SNAPSHOT/dev/provider/index.html (original)
+++ tinkerpop/site/docs/3.2.4-SNAPSHOT/dev/provider/index.html Thu Jan 12 13:05:26 2017
@@ -2439,30 +2439,13 @@ twenty. Under this model, the amount of
</div>
<div class="listingblock">
<div class="content">
-<pre class="CodeRay"><code class="groovy language-groovy">gremlin> cluster = Cluster.open()
-==>localhost/<span class="float">127.0</span><span class="float">.0</span><span class="float">.1</span>:<span class="integer">8182</span>
-gremlin> client = cluster.connect()
-==>org.apache.tinkerpop.gremlin.driver.Client<span class="error">$</span>ClusteredClient<span class="error">@</span><span class="integer">1</span>a3b1f7e
-gremlin> aliased = client.alias(<span class="string"><span class="delimiter">"</span><span class="content">g</span><span class="delimiter">"</span></span>)
-==>org.apache.tinkerpop.gremlin.driver.Client<span class="error">$</span>AliasClusteredClient<span class="error">@</span><span class="integer">62</span>b786dc
-gremlin> g = org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph.INSTANCE.traversal() <span class="comment">//</span><b>(1)</b>
-==>graphtraversalsource[emptygraph[empty], standard]
-gremlin> rs = aliased.submit(g.V().both().barrier().both().barrier()).all().get() <span class="comment">//</span><b>(2)</b>
-==>result{object=v[<span class="integer">1</span>] <span class="type">class</span>=<span class="class">org</span>.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser}
-==>result{object=v[<span class="integer">4</span>] <span class="type">class</span>=<span class="class">org</span>.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser}
-==>result{object=v[<span class="integer">6</span>] <span class="type">class</span>=<span class="class">org</span>.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser}
-==>result{object=v[<span class="integer">5</span>] <span class="type">class</span>=<span class="class">org</span>.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser}
-==>result{object=v[<span class="integer">3</span>] <span class="type">class</span>=<span class="class">org</span>.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser}
-==>result{object=v[<span class="integer">2</span>] <span class="type">class</span>=<span class="class">org</span>.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser}
-gremlin> aliased.submit(g.V().both().barrier().both().barrier().count()).all().get().get(<span class="integer">0</span>).getInt() <span class="comment">//</span><b>(3)</b>
-==><span class="integer">30</span>
-gremlin> rs.collect{[<span class="key">value</span>: <span class="local-variable">it</span>.getObject().get(), <span class="key">bulk</span>: <span class="local-variable">it</span>.getObject().bulk()]} <span class="comment">//</span><b>(4)</b>
-==>[<span class="key">value</span>:v[<span class="integer">1</span>],<span class="key">bulk</span>:<span class="integer">7</span>]
-==>[<span class="key">value</span>:v[<span class="integer">4</span>],<span class="key">bulk</span>:<span class="integer">7</span>]
-==>[<span class="key">value</span>:v[<span class="integer">6</span>],<span class="key">bulk</span>:<span class="integer">3</span>]
-==>[<span class="key">value</span>:v[<span class="integer">5</span>],<span class="key">bulk</span>:<span class="integer">3</span>]
-==>[<span class="key">value</span>:v[<span class="integer">3</span>],<span class="key">bulk</span>:<span class="integer">7</span>]
-==>[<span class="key">value</span>:v[<span class="integer">2</span>],<span class="key">bulk</span>:<span class="integer">3</span>]</code></pre>
+<pre>cluster = Cluster.open()
+client = cluster.connect()
+aliased = client.alias("g")
+g = org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph.INSTANCE.traversal() <b>(1)</b>
+rs = aliased.submit(g.V().both().barrier().both().barrier()).all().get() <b>(2)</b>
+aliased.submit(g.V().both().barrier().both().barrier().count()).all().get().get(0).getInt() <b>(3)</b>
+rs.collect{[value: it.getObject().get(), bulk: it.getObject().bulk()]} <b>(4)</b></pre>
</div>
</div>
<div class="colist arabic">
@@ -3074,7 +3057,7 @@ to provide a way to dynamically evaluate
</div>
<div id="footer">
<div id="footer-text">
-Last updated 2017-01-10 13:42:53 -05:00
+Last updated 2017-01-12 07:47:53 -05:00
</div>
</div>
</body>
Modified: tinkerpop/site/docs/3.2.4-SNAPSHOT/recipes/index.html
URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/3.2.4-SNAPSHOT/recipes/index.html?rev=1778430&r1=1778429&r2=1778430&view=diff
==============================================================================
--- tinkerpop/site/docs/3.2.4-SNAPSHOT/recipes/index.html (original)
+++ tinkerpop/site/docs/3.2.4-SNAPSHOT/recipes/index.html Thu Jan 12 13:05:26 2017
@@ -1636,6 +1636,26 @@ value.</p>
</ol>
</div>
<div class="paragraph">
+<p>Note that the above traversal could also be written using <code>match</code> step:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay"><code class="groovy language-groovy">gremlin> g.V().match(
+ __.as(<span class="string"><span class="delimiter">"</span><span class="content">ov</span><span class="delimiter">"</span></span>).outE().as(<span class="string"><span class="delimiter">"</span><span class="content">e</span><span class="delimiter">"</span></span>),
+ __.as(<span class="string"><span class="delimiter">"</span><span class="content">e</span><span class="delimiter">"</span></span>).inV().as(<span class="string"><span class="delimiter">"</span><span class="content">iv</span><span class="delimiter">"</span></span>),
+ __.as(<span class="string"><span class="delimiter">"</span><span class="content">iv</span><span class="delimiter">"</span></span>).inE().as(<span class="string"><span class="delimiter">"</span><span class="content">ie</span><span class="delimiter">"</span></span>),
+ __.as(<span class="string"><span class="delimiter">"</span><span class="content">ie</span><span class="delimiter">"</span></span>).outV().as(<span class="string"><span class="delimiter">"</span><span class="content">ov</span><span class="delimiter">"</span></span>)).
+ where(<span class="string"><span class="delimiter">"</span><span class="content">ie</span><span class="delimiter">"</span></span>,neq(<span class="string"><span class="delimiter">"</span><span class="content">e</span><span class="delimiter">"</span></span>)).
+ where(<span class="string"><span class="delimiter">"</span><span class="content">ie</span><span class="delimiter">"</span></span>,eq(<span class="string"><span class="delimiter">"</span><span class="content">e</span><span class="delimiter">"</span></span>)).by(label).
+ select(<span class="string"><span class="delimiter">"</span><span class="content">ie</span><span class="delimiter">"</span></span>).
+ group().
+ by(select(<span class="string"><span class="delimiter">"</span><span class="content">ov</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">e</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">iv</span><span class="delimiter">"</span></span>).by().by(label)).
+ unfold().select(values).
+ where(count(local).is(gt(<span class="integer">1</span>)))
+==>[e[<span class="integer">12</span>][<span class="integer">1</span>-created-><span class="integer">3</span>],e[<span class="integer">9</span>][<span class="integer">1</span>-created-><span class="integer">3</span>]]</code></pre>
+</div>
+</div>
+<div class="paragraph">
<p>A third way to approach this problem would be to force a <a href="https://en.wikipedia.org/wiki/Depth-first_search">depth-first search</a>.
The previous examples invoke traversal strategies that force a <a href="https://en.wikipedia.org/wiki/Breadth-first_search">breadth first search</a>
as a performance optimization.</p>
@@ -1690,9 +1710,9 @@ demonstration, an additional edge is add
gremlin> g.V(<span class="integer">1</span>).as(<span class="string"><span class="delimiter">"</span><span class="content">a</span><span class="delimiter">"</span></span>).V(<span class="integer">3</span>).addE(<span class="string"><span class="delimiter">"</span><span class="content">created</span><span class="delimiter">"</span></span>).property(<span class="string"><span class="delimiter">"</span><span class="content">weight</span><span class="delimiter">"</span></span>,<span class="float">0.4d</span>).from(<span class="string"><span class="delimiter">"</span><span class="content">a</span><span class="delimiter">"</span></span>).iterate()
gremlin> g.V(<span class="integer">1</span>).as(<span class="string"><span class="delimiter">"</span><span class="content">a</span><span class="delimiter">"</span></span>).V(<span class="integer">3</span>).addE(<span class="string"><span class="delimiter">"</span><span class="content">created</span><span class="delimiter">"</span></span>).property(<span class="string"><span class="delimiter">"</span><span class="content">weight</span><span class="delimiter">"</span></span>,<span class="float">0.5d</span>).from(<span class="string"><span class="delimiter">"</span><span class="content">a</span><span class="delimiter">"</span></span>).iterate()
gremlin> g.V(<span class="integer">1</span>).outE(<span class="string"><span class="delimiter">"</span><span class="content">created</span><span class="delimiter">"</span></span>).valueMap(<span class="predefined-constant">true</span>)
-==>[<span class="key">id</span>:<span class="integer">9</span>,<span class="key">weight</span>:<span class="float">0.4</span>,<span class="key">label</span>:created]
-==>[<span class="key">id</span>:<span class="integer">12</span>,<span class="key">weight</span>:<span class="float">0.4</span>,<span class="key">label</span>:created]
-==>[<span class="key">id</span>:<span class="integer">13</span>,<span class="key">weight</span>:<span class="float">0.5</span>,<span class="key">label</span>:created]</code></pre>
+==>[<span class="key">id</span>:<span class="integer">9</span>,<span class="key">label</span>:created,<span class="key">weight</span>:<span class="float">0.4</span>]
+==>[<span class="key">id</span>:<span class="integer">12</span>,<span class="key">label</span>:created,<span class="key">weight</span>:<span class="float">0.4</span>]
+==>[<span class="key">id</span>:<span class="integer">13</span>,<span class="key">label</span>:created,<span class="key">weight</span>:<span class="float">0.5</span>]</code></pre>
</div>
</div>
<div class="paragraph">
@@ -1708,8 +1728,8 @@ gremlin> g.V(<span class="integer">1<
where(outV().as(<span class="string"><span class="delimiter">"</span><span class="content">ov</span><span class="delimiter">"</span></span>)).as(<span class="string"><span class="delimiter">"</span><span class="content">e2</span><span class="delimiter">"</span></span>).
filter(select(<span class="string"><span class="delimiter">"</span><span class="content">e1</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">e2</span><span class="delimiter">"</span></span>).by(label).where(<span class="string"><span class="delimiter">"</span><span class="content">e1</span><span class="delimiter">"</span></span>, eq(<span class="string"><span class="delimiter">"</span><span class="content">e2</span><span class="delimiter">"</span></span>))).
filter(select(<span class="string"><span class="delimiter">"</span><span class="content">e1</span><span class="delimiter">"</span></span>,<span class="string"><span class="delimiter">"</span><span class="content">e2</span><span class="delimiter">"</span></span>).by(<span class="string"><span class="delimiter">"</span><span class="content">weight</span><span class="delimiter">"</span></span>).where(<span class="string"><span class="delimiter">"</span><span class="content">e1</span><span class="delimiter">"</span></span>, eq(<span class="string"><span class="delimiter">"</span><span class="content">e2</span><span class="delimiter">"</span></span>))).valueMap(<span class="predefined-constant">true</span>)
-==>[<span class="key">id</span>:<span class="integer">12</span>,<span class="key">weight</span>:<span class="float">0.4</span>,<span class="key">label</span>:created]
-==>[<span class="key">id</span>:<span class="integer">9</span>,<span class="key">weight</span>:<span class="float">0.4</span>,<span class="key">label</span>:created]</code></pre>
+==>[<span class="key">id</span>:<span class="integer">12</span>,<span class="key">label</span>:created,<span class="key">weight</span>:<span class="float">0.4</span>]
+==>[<span class="key">id</span>:<span class="integer">9</span>,<span class="key">label</span>:created,<span class="key">weight</span>:<span class="float">0.4</span>]</code></pre>
</div>
</div>
</div>
@@ -3061,7 +3081,7 @@ the anonymous traversal itself.</p>
<div class="listingblock">
<div class="content">
<pre class="CodeRay"><code class="groovy language-groovy">gremlin> weightFilter = { w -> outE(<span class="string"><span class="delimiter">"</span><span class="content">knows</span><span class="delimiter">"</span></span>).has(<span class="string"><span class="delimiter">'</span><span class="content">weight</span><span class="delimiter">'</span></span>, P.gt(w)).inV() }
-==>groovysh_evaluate<span class="error">$</span>_run_closure1<span class="error">@</span><span class="integer">751</span>ae8a4
+==>groovysh_evaluate<span class="error">$</span>_run_closure1<span class="error">@</span><span class="integer">2</span>b2954e1
gremlin> g.V(<span class="integer">1</span>).flatMap(weightFilter(<span class="float">0.5d</span>)).both()
==>v[<span class="integer">5</span>]
==>v[<span class="integer">3</span>]
@@ -3193,9 +3213,11 @@ submissions!</p>
</div>
<h1 id="_appendix" class="sect0">Appendix</h1>
<div class="paragraph">
-<p>Many of the recipes are based on questions and answers provided on the gremlin-users mailing list. This section
-contains a number of traversals from the mailing list that do not easily fit any particular pattern (i.e. a recipe),
-but are nonetheless interesting and thus remain good tools for learning Gremlin.</p>
+<p>Many of the recipes are based on questions and answers provided on the
+<a href="https://groups.google.com/forum/#!forum/gremlin-users">gremlin-users mailing list</a> or on
+<a href="http://stackoverflow.com/questions/tagged/gremlin">StackOverflow</a>. This section contains those traversals from
+those sources that do not easily fit any particular pattern (i.e. a recipe), but are nonetheless interesting and thus
+remain good tools for learning Gremlin.</p>
</div>
<div id="appendix-a" class="paragraph">
<p><em>For each person in a "follows" graph, determine the number of followers and list their names.</em></p>
@@ -3221,6 +3243,39 @@ gremlin> g.V().as(<span class="string
==>marko={numFollowers=<span class="integer">2</span>, followers=[josh, daniel]}</code></pre>
</div>
</div>
+<div class="paragraph">
+<p>It might also be alternatively written as:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay"><code class="groovy language-groovy">gremlin> g.V().group().
+ by(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>).
+ by(project(<span class="string"><span class="delimiter">'</span><span class="content">numFollowers</span><span class="delimiter">'</span></span>,<span class="string"><span class="delimiter">'</span><span class="content">followers</span><span class="delimiter">'</span></span>).
+ by(__.in(<span class="string"><span class="delimiter">'</span><span class="content">follows</span><span class="delimiter">'</span></span>).count()).
+ by(__.in(<span class="string"><span class="delimiter">'</span><span class="content">follows</span><span class="delimiter">'</span></span>).values(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>).fold())).next()
+==>daniel={numFollowers=<span class="integer">0</span>, followers=<span class="type">[]</span>}
+==>matthias={numFollowers=<span class="integer">0</span>, followers=<span class="type">[]</span>}
+==>josh={numFollowers=<span class="integer">2</span>, followers=[matthias, daniel]}
+==>marko={numFollowers=<span class="integer">2</span>, followers=[josh, daniel]}</code></pre>
+</div>
+</div>
+<div class="paragraph">
+<p>or even:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre class="CodeRay"><code class="groovy language-groovy">gremlin> g.V().group().
+ by(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>).
+ by(__.in(<span class="string"><span class="delimiter">'</span><span class="content">follows</span><span class="delimiter">'</span></span>).values(<span class="string"><span class="delimiter">'</span><span class="content">name</span><span class="delimiter">'</span></span>).fold().
+ project(<span class="string"><span class="delimiter">'</span><span class="content">numFollowers</span><span class="delimiter">'</span></span>,<span class="string"><span class="delimiter">'</span><span class="content">followers</span><span class="delimiter">'</span></span>).
+ by(count(local)).
+ by()).next()
+==>daniel={numFollowers=<span class="integer">0</span>, followers=<span class="type">[]</span>}
+==>matthias={numFollowers=<span class="integer">0</span>, followers=<span class="type">[]</span>}
+==>josh={numFollowers=<span class="integer">2</span>, followers=[matthias, daniel]}
+==>marko={numFollowers=<span class="integer">2</span>, followers=[josh, daniel]}</code></pre>
+</div>
+</div>
<div id="appendix-b" class="paragraph">
<p><em>In the "modern" graph, show each person, the software they worked on and the co-worker count for the software and
the names of those co-workers.</em></p>
@@ -3459,7 +3514,7 @@ gremlin> g.V().as(<span class="string
</div>
<div id="footer">
<div id="footer-text">
-Last updated 2017-01-10 13:45:26 -05:00
+Last updated 2017-01-12 08:02:53 -05:00
</div>
</div>
</body>