| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | [role="xpack"][[java-rest-high-x-pack-graph-explore]]=== Graph explore API[[java-rest-high-x-pack-graph-explore-execution]]==== Initial requestGraph queries are executed using the `explore()` method:["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/GraphDocumentationIT.java[x-pack-graph-explore-request]--------------------------------------------------<1> In this example we seed the exploration with a query to find messages mentioning the mysterious `projectx`<2> What we want to discover in these messages are the ids of `participants` in the communications and the md5 hashesof any attached files. In each case, we want to find people or files that have had at least one document connecting themto projectx.<3> The next "hop" in the graph exploration is to find the people who have shared several messages with the people or filesdiscovered in the previous hop (the projectx conspirators). The `minDocCount` control is used here to ensure the peoplediscovered have had at least 5 communications with projectx entities. Note we could also supply a "guiding query" here e.g. a date range to consider only recent communications but we pass null to consider all connections.<4> Finally we call the graph explore API with the GraphExploreRequest object.  ==== ResponseGraph responses consist of Vertex and Connection objects (aka "nodes" and "edges" respectively):["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/GraphDocumentationIT.java[x-pack-graph-explore-response]--------------------------------------------------<1> Each Vertex is a unique term (a combination of fieldname and term value). The "hopDepth" property tells us at which point in the requested exploration this term was first discovered. <2> Each Connection is a pair of Vertex objects and includes a docCount property telling us how many times these twoVertex terms have been sighted together[[java-rest-high-x-pack-graph-expand-execution]]==== Expanding a client-side GraphTypically once an application has rendered an initial GraphExploreResponse as a collection of vertices and connecting lines (graph visualization toolkits such as D3, sigma.js or Keylines help here) the next step a user may want to do is "expand". This involves finding new vertices that might be connected to the existing ones currently shown.To do this we use the same `explore` method but our request contains details about which vertices to expand from and which vertices to avoid re-discovering. ["source","java",subs="attributes,callouts,macros"]--------------------------------------------------include-tagged::{doc-tests}/GraphDocumentationIT.java[x-pack-graph-explore-expand]--------------------------------------------------<1> Unlike the initial request we do not need to pass a starting query<2> In the first hop which represents our "from" vertices we explicitly list the terms that we already have on-screen and want to expand by using the `addInclude` filter.We can supply a boost for those terms that are considered more important to follow than others but here we select a common value of 1 for all.<3> When defining the second hop which represents the "to" vertices we hope to discover we explicitly list the terms that we already know about using the `addExclude` filter
 |