import { executeApplyEdits, executeAddNamedTypes, executeDeleteNamedType, executeUpdateNamedType, executeAddGraphProperties } from "@arcgis/core/rest/knowledgeGraphService.js";const { executeApplyEdits, executeAddNamedTypes, executeDeleteNamedType, executeUpdateNamedType, executeAddGraphProperties } = await $arcgis.import("@arcgis/core/rest/knowledgeGraphService.js");- Since
- ArcGIS Maps SDK for JavaScript 4.25
A knowledge graph service is associated with several resources. One resource is a knowledge graph, which contains entities and relationships. Another resource is the data model that defines the entity types and relationship types in the graph. A third resource is the service definition which outlines the capabilities of the service. A knowledge graph service allows users to query both the knowledge graph and the data model. Entities and relationships can be added, updated or deleted from the knowledge graph using executeApplyEdits(). To visualize knowledge graph data on map, see knowledge graph layer.
Known Limitations
KnowledgeGraphService capabilities in version 4.26 of the SDK for Javascript are only supported against ArcGIS Enterprise version 11.1 and later. KnowledgeGraphService capabilities in version 4.25 of the SDK for Javascript are supported on ArcGIS Enterprise version 11.0 and earlier.
- See also
KnowledgeGraphLayer for details on visualizing knowledge graph data.
Get started with ArcGIS Knowledge Server for overview of ArcGIS Knowledge for ArcGIS Enterprise
Hosted Knowledge Graph Service for information on managing knowledge graph services via ArcGIS Enterprise and the REST API
Get started with ArcGIS Knowledge (ArcGIS Pro) for information on ArcGIS Knowledge in ArcGIS Pro
Example
const knowledgeGraphModule = await $arcgis.import("@arcgis/core/rest/knowledgeGraphService.js");let knowledgeGraph;// define url to knowledge graph serviceconst url = "https://myHostName.domain.com/server/rest/services/Hosted/myServiceName/KnowledgeGraphServer";// fetch knowledge graphKnowledgeGraphModule.fetchKnowledgeGraph(url) .then((kg) => { // do something with result knowledgeGraph = kg; console.log(knowledgeGraph);});Functions
| Name | Return Type | Object |
|---|---|---|
| | ||
| | ||
| | |
| | ||
| | |
| | ||
| | ||
| | ||
| | |
| | ||
| | ||
| | ||
| | ||
| | |
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | |
| | ||
| | ||
| | ||
| | ||
| | ||
| | |
| | ||
| | ||
| |
executeApplyEdits
Add, delete, or update entities and relationships in a knowledge graph service's graph resource. This operation does not allow adding or deleting properties for entity types or relationship types. However, users can update an entity or relationship to change its property values.
Note
The user must have sufficient privileges to edit content and editing must be enabled for the knowledge graph service for this operation to be successful.
- Signature
-
executeApplyEdits (graph: KnowledgeGraph, edits: GraphApplyEdits, requestOptions?: RequestOptions): Promise<GraphApplyEditsResult>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| graph | The knowledge graph associated with the service. See also ArcGIS REST APIs - Hosted Knowledge Graph Service. | | |
| edits | Specifies the entities and relationships and their properties to add, update or delete. | | |
| requestOptions | Additional options to be used for the data request. | |
- Returns
- Promise<GraphApplyEditsResult>
When resolved, the result is a GraphApplyEditsResult.
Examples
// sample executeApplyEdits() to add a new entity to the `Supplier` entity typeconst newEntity = new Entity({ typeName: "Supplier", properties: { Name: "Supplier 5", EmployeeCount: 681 }});KnowledgeGraphModule.executeApplyEdits( graph, { entityAdds: [newEntity] }) .then((editResult) => { console.log("Graph Add Result", editResult); });});// Basic example results of adding one entity to the `Supplier` entity type{ editResults:[{ adds:[ { id: "{A1W5F4A8S-41F1-49A4-8412-ANIWN9906E88}", error: false }], deletes:[], typeName: "Supplier", updates:[] }], hasError: false, error: undefined}//update existing recordsconst updateEntity = new Entity({ typeName: "Supplier", // update the EmployeeCount from 681 to 685 properties: { Name: "Supplier 5", EmployeeCount: 685 }, id:"{A1W5F4A8S-41F1-49A4-8412-ANIWN9906E88}" //id of entity already in knowledge graph});const updateRelationship = new Relationship({ typeName: "buys_part", properties: { quantity: 5000 }, // origin and destination entities must already exist in the graph originId: "{AN4E4G85-41F1-49A4-8412-CACCC9906E88}", destinationId: "{9D2D6AFD-41F1-49A4-8412-1DGR8E5D6S1G4}"});KnowledgeGraphModule.executeApplyEdits( graph, { entityUpdates: [updateEntity], relationshipUpdates: [updateRelationship] }) .then((editResult) => { console.log("Graph Update Result", editResult); });});//delete existing recordsKnowledgeGraphModule.executeApplyEdits( graph, { entityDeletes: [{ typeName: "Supplier", ids: ["{AMGIE541G-41F1-49A4-8412-CACCC9906E88}", "{HNWIGHE15-WH52-2GE6-1A5W-A1F8W4FS3A1S5}"] },{ typeName: "Part", ids: ["{FNIW4GF1-ANFW-49A4-ANW7-GNWIGHAF4S51FS}"] }], relationshipDeletes: [{ typeName: "Buys_part", ids: ["{MH4E54G8E-MF4W-1842-2S44-15AF5W8F4S2W8}"] }], //delete all relationships connected to the deleted entities. options:{ cascadeDelete: true } }) .then((editResult) => { console.log("Graph Delete Result", editResult); });}); executeAddNamedTypes
- Since
- ArcGIS Maps SDK for JavaScript 4.33
Create new entity types or relationship types in your knowledge graph.
Note
The user must have sufficient privileges to edit the data model for the knowledge graph service for this operation to be successful.
- Signature
-
executeAddNamedTypes (graph: KnowledgeGraph, namedTypes: ExecuteAddNamedTypesNamedTypes, options?: RequestOptions): Promise<GraphAddNamedTypesResult>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| graph | The knowledge graph. Retrieved using fetchKnowledgeGraph(). | | |
| namedTypes | The new entity types or relationship types to add to the graph. | | |
| options | Additional options to be used for the data request. | |
- Returns
- Promise<GraphAddNamedTypesResult>
When resolved, the result is a GraphAddNamedTypesResult.
Example
const knowledgeGraphModule = await $arcgis.import("@arcgis/core/rest/knowledgeGraphService.js");
// use fetchKnowledgeGraph() to retrieve the knowledge graph// define the new entity typeconst newEntityType = { type: "entity", name: "Person", properties: [ { name: "nameProp", alias: "Name", fieldType: "esriFieldTypeString", role: "esriGraphPropertyRegular", }, ],};
// define a new relationship typeconst newRelationshipType = { type: "relationship", name: "knows", properties: [ { name: "dateMet", fieldType: "esriFieldTypeTimestampOffset", role: "esriGraphPropertyRegular", }, ], endPoints: [ { originEntityType: "Person", destinationEntityType: "Person", }, ],};
// add the new types, update the data model and get the updated graph.knowledgeGraphModule.executeAddNamedTypes(graph, { newEntityTypes: [newEntityType], newRelationshipTypes: [newRelationshipType] }).then((response) => { graph = response.updatedKnowledgeGraph; }) executeDeleteNamedType
- Since
- ArcGIS Maps SDK for JavaScript 4.33
Delete an entity type or relationship type from the graph. There must be no records of the type in the graph. To delete entities or relationships of the specified type, see executeApplyEdits().
Note
The user must have sufficient privileges to edit the data model for the knowledge graph service for this operation to be successful.
- Signature
-
executeDeleteNamedType (graph: KnowledgeGraph, namedType: string, options?: RequestOptions): Promise<GraphDeleteNamedTypeResult>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| graph | The knowledge graph. Retrieved using fetchKnowledgeGraph(). | | |
| namedType | The name of the entity type or relationship type to delete. | | |
| options | Additional options to be used for the data request. | |
- Returns
- Promise<GraphDeleteNamedTypeResult>
When resolved, the result is a GraphDeleteNamedTypeResult.
Example
const knowledgeGraphModule = await $arcgis.import("@arcgis/core/rest/knowledgeGraphService.js");
// use fetchKnowledgeGraph() to retrieve the knowledge graph// Delete the type, update the data model and get the updated graph.knowledgeGraphModule .executeDeleteNamedType(graph,"knows") .then((response) => { graph = response.updatedKnowledgeGraph; }) executeUpdateNamedType
- Since
- ArcGIS Maps SDK for JavaScript 4.33
Update an entity type or relationship type.
Note
The user must have sufficient privileges to edit the data model for the knowledge graph service for this operation to be successful.
- Signature
-
executeUpdateNamedType (graph: KnowledgeGraph, namedType: string, updatedNamedType: UpdateNamedType, options?: RequestOptions): Promise<GraphUpdateNamedTypesResult>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| graph | The knowledge graph to update. | | |
| namedType | -The name of the entity type or relationship type to update with the property to be updated. | | |
| updatedNamedType | The updated entity type or relationship type. | | |
| options | Additional options to be used for the data request. | |
- Returns
- Promise<GraphUpdateNamedTypesResult>
When resolved, the result is an GraphUpdateNamedTypesResult.
executeAddGraphProperties
- Since
- ArcGIS Maps SDK for JavaScript 4.33
Add a GraphProperty for a particular entity type or relationship type.
Note
The user must have sufficient privileges to edit the data model for the knowledge graph service for this operation to be successful.
- Signature
-
executeAddGraphProperties (graph: KnowledgeGraph, namedType: string, namedTypeProperties: GraphProperty[], options?: RequestOptions): Promise<GraphAddPropertyResult>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| graph | The knowledge graph to update. | | |
| namedType | The name of the entity type or relationship type to update with the property to be updated. | | |
| namedTypeProperties | A list of graph properties to add to the entity type or relationship type. | | |
| options | Additional options to be used for the data request. | |
- Returns
- Promise<GraphAddPropertyResult>
When resolved, the result is an GraphAddPropertyResult.
executeDeleteGraphProperty
- Since
- ArcGIS Maps SDK for JavaScript 4.33
Delete a GraphProperty for a particular entity type or relationship type. A GraphProperty can only be deleted if the entity type or relationship type has no entity or relationship records in it.
Note
The user must have sufficient privileges to edit the data model for the knowledge graph service for this operation to be successful.
- Signature
-
executeDeleteGraphProperty (graph: KnowledgeGraph, namedType: string, propertyName: string, options?: RequestOptions): Promise<GraphDeletePropertyResult>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| graph | The knowledge graph to update. | | |
| namedType | The name of the entity type or relationship type to update with the property to be updated. | | |
| propertyName | The name of the GraphProperty to delete. | | |
| options | Additional options to be used for the data request. | |
- Returns
- Promise<GraphDeletePropertyResult>
When resolved, the result is an GraphDeletePropertyResult.
executeUpdateGraphProperty
- Since
- ArcGIS Maps SDK for JavaScript 4.33
Update a GraphProperty for a particular entity type or relationship type in the graph.
Note
The user must have sufficient privileges to edit the data model for the knowledge graph service for this operation to be successful.
- Signature
-
executeUpdateGraphProperty (graph: KnowledgeGraph, namedType: string, originalPropertyName: string, updatedProperties: UpdateGraphProperties, options?: RequestOptions): Promise<GraphUpdatePropertyResult>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| graph | The knowledge graph to update. | | |
| namedType | The name of the entity type or relationship type to update with the property to be updated. | | |
| originalPropertyName | The original name of the property to update. | | |
| updatedProperties | The updated properties for the entity type or relationship type property specified. | | |
| options | Additional options to be used for the data request. | |
- Returns
- Promise<GraphUpdatePropertyResult>
When resolved, the result is an GraphUpdatePropertyResult.
executeAddGraphFieldIndex
- Since
- ArcGIS Maps SDK for JavaScript 4.33
Adds a field index for a particular property on an entity type or relationship type in a graph.
Note
The user must have sufficient privileges to edit the data model for the knowledge graph service for this operation to be successful.
- Signature
-
executeAddGraphFieldIndex (graph: KnowledgeGraph, namedType: string, fieldIndexes: FieldIndex[], options?: RequestOptions): Promise<GraphAddFieldIndexResult>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| graph | The knowledge graph to update. | | |
| namedType | The name of the entity type or relationship type with the property for which to add a field index. | | |
| fieldIndexes | The field indexes to add. | | |
| options | Additional options to be used for the data request. | |
- Returns
- Promise<GraphAddFieldIndexResult>
When resolved, the result is an GraphAddFieldIndexResult.
executeDeleteGraphFieldIndex
- Since
- ArcGIS Maps SDK for JavaScript 4.33
Deletes the field index for a particular property on an entity type or relationship type in a graph.
Note
The user must have sufficient privileges to edit the data model for the knowledge graph service for this operation to be successful.
- Signature
-
executeDeleteGraphFieldIndex (graph: KnowledgeGraph, namedType: string, fieldIndexNames: string[], options?: RequestOptions): Promise<GraphDeleteFieldIndexResult>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| graph | The knowledge graph to update. | | |
| namedType | The name of the entity type or relationship type to update. | | |
| fieldIndexNames | string[] | The names of the field index to delete. | |
| options | Additional options to be used for the data request. | |
- Returns
- Promise<GraphDeleteFieldIndexResult>
When resolved, the result is an GraphDeleteFieldIndexResult.
executeUpdateSearchIndex
- Since
- ArcGIS Maps SDK for JavaScript 4.33
Update the search index used by the knowledge graph. Properties added to the search index are used identify matches to the search term provided in executeSearch() and executeSearchStreaming().
Note
The user must have sufficient privileges to edit the data model for the knowledge graph service for this operation to be successful.
- Signature
-
executeUpdateSearchIndex (graph: KnowledgeGraph, namedType: string, searchProperties: ExecuteUpdateSearchIndexSearchProperties, options?: RequestOptions): Promise<GraphUpdateSearchIndexResult>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| graph | The knowledge graph to update. | | |
| namedType | The name of the entity or relationship type to update. | | |
| searchProperties | The properties of the named type with which to update the search index. | | |
| options | Additional options to be used for the data request. | |
- Returns
- Promise<GraphUpdateSearchIndexResult>
When resolved, the result is an GraphUpdateSearchIndexResult.
executeQuery
Executes a query on knowledge graph service's graph resource using the Esri implementation of openCypher and returns the results.
- Signature
-
executeQuery (graph: KnowledgeGraph, queryArguments: GraphQuery, requestOptions?: RequestOptions): Promise<GraphQueryResult>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| graph | The knowledge graph associated with the service. See also ArcGIS REST APIs - Hosted Knowledge Graph Service. | | |
| queryArguments | Defines the query to perform on the provided knowledge graph service. | | |
| requestOptions | Additional options to be used for the data request. | |
- Returns
- Promise<GraphQueryResult>
When resolved, the result is an GraphQueryResult.
Example
// typical use caseKnowledgeGraphModule.executeQuery( knowledgeGraph, //graph { // queryArguments openCypherQuery: "MATCH (n) RETURN n LIMIT 100", //query }).then((queryResult) => { // do something with the result}); executeQueryStreaming
Execute a streaming query on a knowledge graph service's
graph resource.
Streaming query returns a readable stream that must be read to access the returned graph data.
Unlike executeQuery(),
executeQueryStreaming() returns results in small chunks that can be
processed immediately, without waiting for all results to be returned.
Streaming query is faster and more efficient than executeQuery().
Streaming query also retrieves all matching records even if the total exceeds the maxRecordCount defined
in the service without additional queries or pagination.
Another benefit of streaming query is that the query is encoded which means that it is far smaller than a traditional
HTTP GET or JSON POST body. This is especially important when trying to do a query on a very large argument,
such as a large set of Ids or intersecting a complex geometry.
The entities and relationships in the graph are queried by sending an Esri implementation of openCypher query.
- Signature
-
executeQueryStreaming (graph: KnowledgeGraph, queryArguments: GraphQueryEncoded, requestOptions?: RequestOptions): Promise<GraphQueryStreamingResult>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| graph | The knowledge graph associated with the service. See also ArcGIS REST APIs - Hosted Knowledge Graph Service. | | |
| queryArguments | Defines the query to perform on the provided knowledge graph service. Optionally specify additional query parameters | | |
| requestOptions | Additional options to be used for the data request. | |
- Returns
- Promise<GraphQueryStreamingResult>
When resolved, the result is an GraphQueryStreamingResult.
Examples
// sample streaming query using bind parameters// to search for entities with a the `name` property that matches a specific string// or have their geometry within a bounding box.// get all parts bought by each supplier.// query returns both the supplier and the part it buys.const query = `MATCH (s:Supplier)-[:buys_part]-(p:Part) WHERE s.name=$name OR esri.graph.ST_Intersects($geom, s.geometry) RETURN s,p`;
KnowledgeGraphModule.executeQueryStreaming( knowledgeGraph, { openCypherQuery: query, bindParameters: { name: "Supplier 5", //bounding box around the area of Washington DC, USA geom: new Polygon({ rings: [ [ [38,-78], [39, -78], [39, -76], [-38, -76], [-38, -78], ], ], }), }}).then((streamingQueryResult)=>{ // streaming query returns a readableStream which must be read to access the returned graph data readStream(streamingQueryResult)});// a function to read the readable stream returned from the above queryconst readStream = async (streamingQueryResult) => { let time = Date.now(); let reader = streamingQueryResult.resultRowsStream.getReader(); try { while (true) { const { done, value } = await reader.read(); if (done) { console.log(`Completed database requests: ${(Date.now() - time) / 1000} seconds`); break; } console.log(`Chunk returned in: ${(Date.now() - time) / 1000} seconds`); // use the results // list the parts bought by each supplier let supplierParts = {}; // each element of the result array will contain one supplier and one part it buys for (var v in value){ let supplier = value[v][0].properties.Name let part = value [v][1].properties.Name if(!(supplier in supplierParts)){ supplierParts[supplier] = []; } // collect parts by supplier that buys them supplierParts[supplier].push(part); console.log(supplierParts); // result printed to the console: {Supplier 1:[Part1], Supplier 3:[Part2, Part3]} } } catch (err) { if (err.name === "AbortError") { console.log("Request aborted as expected"); } else { throw err; } }};// result stream from above query after it has been read"Streaming chunk returned in: 0.082 seconds"[ [{ "declaredClass": "esri.rest.knowledgeGraph.Entity", "properties": { "Name": "Supplier 1", "City": "Washington DC", "EmployeeCount": 31 }, "typeName": "Supplier", "id": "{57FDF2F3-34C8-48EF-9A3B-76ED9314C4D2}" },{ "declaredClass": "esri.rest.knowledgeGraph.Entity", "properties": { "Part_ID": 695401, "Name": "Part1", "Minimum_quantity": 360 }, "typeName": "Part", "id": "{IWN51W4-1AW8-A2W6-1AW5F-1AW8F9F4W51AS}", }], [{ "declaredClass": "esri.rest.knowledgeGraph.Entity", "properties": { "Name": "Supplier 2", "City": "Baltimore", "EmployeeCount": 53 }, "typeName": "Supplier", "id": "{1A4W8F5W-1WA8-5W6A-A1W8-A1W5F8W3S482A}" },{ "declaredClass": "esri.rest.knowledgeGraph.Entity", "properties": { "Part_ID": 695401, "Name": "Part2", "Minimum_quantity": 2500 }, "typeName": "Part", "id": "{A1W5F8W4F-A1W8-1894-16A5-A86WF4A8SFWD}", }], [{ "declaredClass": "esri.rest.knowledgeGraph.Entity", "properties": { "Name": "Supplier 2", "City": "Baltimore", "EmployeeCount": 53 }, "typeName": "Supplier", "id": "{1A4W8F5W-1WA8-5W6A-A1W8-L5H4G8RT1PK3}" },{ "declaredClass": "esri.rest.knowledgeGraph.Entity", "properties": { "Part_ID": 695401, "Name": "Part3", "Minimum_quantity": 5000 }, "typeName": "Part", "id": "{PTJ51FT-KY4H-1GY5-G1Y8-G1Y5K49G8Y4GHJ}", }]]// aborting the query// create instance of native browser abort controllerconst controller = new AbortController();
// create queryKnowledgeGraphModule.executeQueryStreaming( knowledgeGraph, { openCypherQuery: "MATCH (n) RETURN n LIMIT 100", }, { signal: controller.signal, } ) .then((streamingQueryResult) => { readStream(streamingQueryResult); }) // indicate that the stream was aborted .catch((err) => { if (err.name === "AbortError") { console.log("Request aborted as expected"); }
// abort the query after half a secondsetTimeout(() => { console.log("Sending abort signal"); controller.abort();}, 500); executeSearch
Search the knowledge graph using a full-text index that is automatically built on the property values in the graph and returns the result. Search accepts Lucene search syntax. Use the DataModel to see the indexed fields for each RelationshipType and EntityType.
- Signature
-
executeSearch (graph: KnowledgeGraph, searchArguments: GraphSearch, requestOptions?: RequestOptions): Promise<GraphQueryResult>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| graph | The knowledge graph associated with the service. See also ArcGIS REST APIs - Hosted Knowledge Graph Service. | | |
| searchArguments | Defines the free text search to run against a knowledge graph. | | |
| requestOptions | Additional options to be used for the data request. | |
- Returns
- Promise<GraphQueryResult>
When resolved, the result is a GraphQueryResult that contains all records matching the search. If there are no matches the result will be empty.
Examples
// typical use caseKnowledgeGraphModule.executeSearch( knowledgeGraph, //graph { // searchArguments searchQuery: "Sun", //search term typeCategoryFilter: "both" //search entities, relationships or both. }).then((searchResult) => { // do something with the result console.log(searchResult)});// sample search result{ "declaredClass": "esri.rest.knowledgeGraph.GraphQueryResult", "resultRows": [ [ { "declaredClass": "esri.rest.knowledgeGraph.Entity", "properties": { "shape": { "declaredClass": "esri.geometry.Point", "cache": {}, "hasM": false, "hasZ": false, "latitude": 53.589000000000006, "longitude": -0.9633, "type": "point", "extent": null, "spatialReference": { "wkid": 4326 }, "x": -0.9633, "y": 53.589000000000006 }, "Name": "Suncommon", "Employee_Count": 400 }, "typeName": "Company", "id": "{WIPJ483T-U8UI-LLK9-YUI8-Y5YK8YGD88E9}", } ], [ { "declaredClass": "esri.rest.Relationship.Relationship", "originID": "{44027400-4B48-4FF2-B526-E27FC17EC246}", "destinationID": "{CB0CF580-3899-491E-8F10-0AD1DA4EE49B}", "properties": { "orderDay": "Sunday", "quantity": 15000 }, "typeName": "buys_part", "id": "{ABCDEFG-0000-1111-2222-0AD1DA4EE49B}" } ] } executeSearchStreaming
Execute a streaming search on a knowledge graph service's
graph resource.
Streaming search returns a readable stream that must be read to access the returned data.
Unlike executeSearch(), executeSearchStreaming()
returns results in small chunks that can be processed immediately, without having to wait for all results to be returned.
Streaming search is faster and more efficient than executeSearch(). Streaming search also retrieves all matching
records even if the total exceeds the searchMaxRecordCount defined in the service without additional queries or pagination.
Another benefit of streaming search is that the request is encoded which means that it is far smaller than a traditional
HTTP GET or JSON POST body. This is especially important when trying to do a search on a very large argument,
such as a large set of Ids.
Streaming search accepts Lucene search syntax. Streaming search uses a full-text index that is automatically built on the property values in the graph. Use the DataModel to see the indexed fields for each RelationshipType and EntityType.
- Signature
-
executeSearchStreaming (graph: KnowledgeGraph, searchArguments: GraphSearchEncoded, requestOptions?: RequestOptions): Promise<GraphQueryStreamingResult>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| graph | The knowledge graph associated with the service. See also ArcGIS REST APIs - Hosted Knowledge Graph Service. | | |
| searchArguments | Define the free text search to execute against the knowledge graph. Optionally specify additional search parameters. | | |
| requestOptions | Additional options to be used for the data request. | |
- Returns
- Promise<GraphQueryStreamingResult>
When resolved, the result is a GraphQueryStreamingResult that contains all records matching the search. If there are no matches the result will be empty.
Examples
// example search for "solar"with additional parametersKnowledgeGraphModule.executeSearchStreaming( knowledgeGraph, { searchQuery: "solar", typeCategoryFilter: "both", returnSearchContext: false, start: 1, num: 200, //return 200 records. namedTypesFilter: ["Company", "Supplier", "Part"], idsFilter: ["{G4E8G2S8D-2GS5-98S4-3S5D-S1DE7G45DS48}", "{FNWI1G5W-1A5W-3A5W-8412-A1W5F4W8F7AS}", "{9D2D6AFD-41F1-49A4-8412-CACCC9906E88}"] }).then((streamingSearchResult)=>{ // the result of a streaming search is a readableStream which requires decoding. readStream(streamingSearchResult)})// a function to read the readable stream returned from the above queryconst readStream = async (streamingQueryResult) => { let time = Date.now(); let reader = streamingQueryResult.resultRowsStream.getReader(); try { while (true) { const { done, value } = await reader.read(); if (done) { console.log(`Completed database requests: ${(Date.now() - time) / 1000} seconds`, value); break; } console.log(`Chunk returned in: ${(Date.now() - time) / 1000} seconds`, value) } } catch (err) { if (err.name === "AbortError") { console.log("Request aborted as expected"); } else { throw err; } }};// sample result of streaming search result chunk read and printed to the console
"Streaming chunk returned in: 0.082 seconds"[ [{ "declaredClass": "esri.rest.knowledgeGraph.Entity", "properties": { "Name": "Suncommon", "Employee_Count": 400, "energyType": "solar" }, "typeName": "Company", "id": "{G4E8G2S8D-2GS5-98S4-3S5D-S1DE7G45DS48}" }], [{ "declaredClass": "esri.rest.knowledgeGraph.Entity", "properties": { "Name": "Quality Solar Supply", "Supplier_code": "158B", "City": "New Orleans", }, "typeName": "Supplier", "id": "{FNWI1G5W-1A5W-3A5W-8412-A1W5F4W8F7AS}" }], [{ "declaredClass": "esri.rest.knowledgeGraph.Entity", "properties": { "Name": "Solar panel", "panel_type": "Polycrystalline", "price_per_unit": 400 }, "typeName": "Part", "id": "{9D2D6AFD-41F1-49A4-8412-CACCC9906E88}" }]] fetchAllClientDataKeys
Returns all client data keys existing on the knowledge graph service associated with the given knowledge graph.
- Signature
-
fetchAllClientDataKeys (graph: KnowledgeGraph, requestOptions?: RequestOptions): Promise<string[]>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| graph | The knowledge graph associated with the service. See also ArcGIS REST APIs - Hosted Knowledge Graph Service. | | |
| requestOptions | Additional options to be used for the data request. | |
Example
// typical use caseconst url = "https://myHostName.domain.com/server/rest/services/Hosted/myServiceName/KnowledgeGraphServer";
const knowledgeGraph = await knowledgeGraphService.fetchKnowledgeGraph(url)
KnowledgeGraphModule.fetchAllClientDataKeys(knowledgeGraph).then((clientDataKeys) => { // do something with result}); fetchClientDataAtKeys
Retrieves the specified client data keys from the knowledge graph service associated with the given knowledge graph, if they exist. If a given client data key does not exist on the service, it is not returned in the result map.
- Signature
-
fetchClientDataAtKeys (graph: KnowledgeGraph, keysToFetch: string[], options?: FetchClientDataAtKeysOptions): Promise<Map<string, string>>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| graph | The knowledge graph associated with the service. See also ArcGIS REST APIs - Hosted Knowledge Graph Service. | | |
| keysToFetch | string[] | An array of client data keys to fetch from the service | |
| options | Additional options when requesting client keys. | |
Example
// typical use caseconst url = "https://myHostName.domain.com/server/rest/services/Hosted/myServiceName/KnowledgeGraphServer";
const knowledgeGraph = await knowledgeGraphService.fetchKnowledgeGraph(url)
KnowledgeGraphModule.fetchClientDataAtKeys(knowledgeGraph, ["Person/LinkChart/LinkChartSubLayer"]).then((clientDataResultMap) => { // do something with result}); fetchKnowledgeGraph
Retrieves the knowledge graph service based on the URL provided.
- Signature
-
fetchKnowledgeGraph (url: string): Promise<KnowledgeGraph>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| url | URL to the ArcGIS Knowledge Server REST resource that represents a knowledge graph service. | |
- Returns
- Promise<KnowledgeGraph>
When resolved, the result is a KnowledgeGraph.
Example
// typical use caseconst url = "https://myHostName.domain.com/server/rest/services/Hosted/myServiceName/KnowledgeGraphServer";
KnowledgeGraphModule.fetchKnowledgeGraph(url).then((kg) => { // do something with result}); refreshDataModel
Refreshes the data model of the knowledge graph.
- Signature
-
refreshDataModel (graph: KnowledgeGraph): Promise<void>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| graph | The knowledge graph associated with the service. See also ArcGIS REST APIs - Hosted Knowledge Graph Service. | |
Example
// typical use caseKnowledgeGraphModule.refreshDataModel(urlToKnowledgeGraph).then((newKG) => { // do something with result}); executeFindPathsAsynchronous
Executes an asynchronous request to the ServerFilteredFindPaths GP tool. Allows you to identify paths that connect the specified entities or entity types and satisfy all specified conditions. A path is made of a sequence of relationships and the corresponding entities.
Known Limitations
Find Paths can only be used with a Publisher or Administrator role. See Enterprise User types, roles, and privileges.
- Signature
-
executeFindPathsAsynchronous (toolSettings: FindPathsToolSettings, requestOptions?: RequestOptions): Promise<JobInfo>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| toolSettings | The pathfinding configuration such as origin and destination, waypoints and other tool settings. See FindPathToolSettings for the full list of available settings. | | |
| requestOptions | The options specified by the user in the data request. See RequestOptions for available properties. | |
executeFindPaths
Executes a request to the ServerFilteredFindPaths GP tool. Allows you to identify paths that connect the specified entities or entity types and satisfy all specified conditions. A path is made of a sequence of relationships and the corresponding entities.
Known Limitations
Find Paths can only be used with a Publisher or Administrator role. See Enterprise User types, roles, and privileges.
- Signature
-
executeFindPaths (toolSettings: FindPathsToolSettings, requestOptions?: RequestOptions): Promise<CIMFilteredFindPathsResultJSON>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| toolSettings | The pathfinding configuration such as origin and destination, waypoints and other tool settings. See FindPathToolSettings for the full list of available settings. | | |
| requestOptions | Additional options specified in the data request. See RequestOptions for available properties. | |
- Returns
- Promise<CIMFilteredFindPathsResultJSON>
Returns paths found based on the configuration and pathfinding statistics.
Example
knowledgeGraphService.executeFindPaths({ inKnowledgeGraphUrl: "https://sampleserver7.arcgisonline.com/server/rest/services/Hosted/BumbleBees/KnowledgeGraphServer", config: { type: "CIMFilteredFindPathsConfiguration", name: "exampleFFPconfiguration", originEntities: [ { type: "CIMFilteredFindPathsEntity", iD: devPathStart, entityTypeName: "User" } ], destinationEntities: [ { type: "CIMFilteredFindPathsEntity", iD: devPathEnd, entityTypeName: "Species" } ], pathFilters: [ { type: "CIMFilteredFindPathsPathFilter", iD: null, itemTypeName: "Observation", itemType: "Entity", filterType: "Include" } ], defaultTraversalDirectionType: "Any", entityUsage: "EachPair", pathMode: "All", minPathLength: 1, maxPathLength: 8, maxCountPaths: 100000 } }); fetchAsynchronousFindPathsResultData
Retrieves the filtered find path results from a job started by executeFindPathsAsynchronous().
- Signature
-
fetchAsynchronousFindPathsResultData (jobInfo: JobInfo, requestOptions?: RequestOptions): Promise<CIMFilteredFindPathsResultJSON>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| jobInfo | The job info returned from executeFindPathsAsynchronous(). | | |
| requestOptions | Additional options specified in the data request. | |
- Returns
- Promise<CIMFilteredFindPathsResultJSON>
Returns all of the records in the paths found based on the configuration and statistics on how the paths were generated.
executeAddDomain
- Since
- ArcGIS Maps SDK for JavaScript 5.0
Add a domain to the knowledge graph service data model. This adds the domain to the service. To assign the domain to a property on a named type use executeUpdateGraphProperty().
- Signature
-
executeAddDomain (graph: KnowledgeGraph, domain: RangeDomain | CodedValueDomain, fieldType: EsriFieldType, domainOptions?: DomainOptions, requestOptions?: RequestOptions): Promise<GraphDataModelSingletonOperationResult>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| graph | The knowledge graph associated with the service. | | |
| domain | The domain to add to the graph. | | |
| fieldType | The data type of the domain and the fields to which it can be assigned. | | |
| domainOptions | Specify the merge and split policy of the domain in the case of polygon or multi feature geometries. | | |
| requestOptions | Additional options specified in the data request. | |
Example
const kg = await knowledgeGraphService.fetchKnowledgeGraph({ url: "https://myHostName.domain.com/server/rest/services/Hosted/myServiceName/KnowledgeGraphServer"})const domain = new RangeDomain({ name: dayOfMonth, type: "range", minValue: 1, maxValue: 31,});knowledgeGraphService .executeAddDomain(kg, domain, esriFieldTypeInteger) .then((response) => { console.log("Domain Add transaction completed. Response: ", response); }) .catch((error) => { console.error("Error adding domain: ", error);}); executeUpdateDomain
- Since
- ArcGIS Maps SDK for JavaScript 5.0
Update a domain on a knowledge graph service. For coded value domains, you must supply all valid values for the domain.
- Signature
-
executeUpdateDomain (graph: KnowledgeGraph, updatedDomain: RangeDomain | CodedValueDomain, fieldType: EsriFieldType, domainOptions?: DomainOptions, requestOptions?: RequestOptions): Promise<GraphDataModelSingletonOperationResult>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| graph | The knowledge graph. | | |
| updatedDomain | The domain to update. | | |
| fieldType | The data type of the domain and the fields to which it can be assigned. | | |
| domainOptions | Specify the merge and split policy of the domain in the case of polygon or multi feature geometries. | | |
| requestOptions | Additional options specified in the data request. | |
executeDeleteDomain
- Since
- ArcGIS Maps SDK for JavaScript 5.0
Delete a domain from a knowledge graph service. To delete a domain it must not be associated with any named type property in the graph. To remove a domain from a named type property use executeUpdateGraphProperty().
- Signature
-
executeDeleteDomain (graph: KnowledgeGraph, domainName: string, requestOptions?: RequestOptions): Promise<GraphDataModelSingletonOperationResult>
Parameters
| Parameter | Type | Description | Required |
|---|---|---|---|
| graph | The knowledge graph. | | |
| domainName | The name of the domain to delete | | |
| requestOptions | Additional options specified in the data request. | |
Example
const kg = await knowledgeGraphService.fetchKnowledgeGraph({ url: "https://myHostName.domain.com/server/rest/services/Hosted/myServiceName/KnowledgeGraphServer"})
knowledgeGraphService .executeDeleteDomain(kg, "dayOfMonth") .then((response) => { console.log("Domain Delete transaction completed. Response: ", response); }) .catch((error) => { console.error("Error adding domain: ", error);});Type definitions
ExecuteAddNamedTypesNamedTypes
newRelationshipTypes
- Type
- RelationshipType[] | undefined
The new relationship types to add to the graph.
UpdateNamedType
Properties of a named type that can be updated, such as the alias.
- Supertypes
- Partial<Pick<GraphObjectType, "alias">>
UpdateGraphProperties
The properties of a GraphProperty that can be updated with executeUpdateGraphProperty()
- Supertypes
- Partial<Pick<GraphProperty, "alias" | "editable" | "required" | "defaultVisibility" | "defaultValue" | "domain">>
ExecuteUpdateSearchIndexSearchProperties
addSearchProperties
- Type
- SearchProperties | undefined
The properties of the specified entity type or relationship type to add to the search index.
removeSearchProperties
- Type
- SearchProperties | undefined
The properties of the specified entity type or relationship type to remove from the search index.
FetchClientDataAtKeysOptions
ignoreCache
By default, client data requests are cached by their version. When a previously requested key is requested again and the client data version for that key on the service is unchanged, the existing cached value is returned. When ignoreCache is true, the request ignores the cache and fetches and returns the value from the service.
requestOptions
- Type
- RequestOptions | undefined
Additional options to be used for the data request.