ArcGIS Pro 3.3 API Reference Guide
ArcGIS.Core.Data.Knowledge Namespace / KnowledgeGraph Class / SubmitSearch Method
The search filter to submit
Example

In This Topic
    SubmitSearch Method
    In This Topic
    Perform a text search on the knowledge graph using the given KnowledgeGraphSearchFilter. This method must be called on the MCT. Use QueuedTask.Run.
    Syntax

    Parameters

    searchFilter
    The search filter to submit

    Return Value

    Exceptions
    ExceptionDescription
    This method or property must be called within the lambda passed to QueuedTask.Run.
    searchFilter cannot be null
    searchFilter.SearchText cannot be null or empt
    Remarks
    Addins can specify KnowledgeGraphSearchFilter.SearchText using the Apache Lucene Query Parser syntax. If a KnowledgeGraphSearchFilter.MaxRowCount is not specified then it defaults to 100. Addins should call ArcGIS.Core.Data.Realtime.RealtimeCursorBase.WaitForRowsAsync on the returned KnowledgeGraphCursor instance after submitting a search to wait for rows to be returned. If the searchFilter is null a System.ArgumentNullException will be thrown. If the searchFilter SearchText is empty or null, a System.ArgumentException will be thrown.
    Example
    Submit a Text Search
    //On the QueuedTask...
    //and assuming you have established a connection to a knowledge graph
    //...
    //Construct a KG search filter. Search text uses Apache Lucene Query Parser
    //syntax - https://lucene.apache.org/core/2_9_4/queryparsersyntax.html
    var kg_sf = new KnowledgeGraphSearchFilter()
    {
      SearchTarget = KnowledgeGraphNamedTypeCategory.Entity,
      SearchText = "Acme Electric Co.",
      ReturnSearchContext = true,
      MaxRowCount = 10 //Default is 100 if not specified
    };
    
    //submit the search - returns a KnowledgeGraphCursor
    var e = 0;
    using (var kg_rc = kg.SubmitSearch(kg_sf))
    {
      //wait for rows to be returned from the server
      //note the "await"...
      while (await kg_rc.WaitForRowsAsync())
      {
        //Rows have been retrieved - process this "batch"...
        while (kg_rc.MoveNext())
        {
          //Get the current KnowledgeGraphRow
          using (var graph_row = kg_rc.Current)
          {
            //We are returning entities from this search
            var entity = graph_row[0] as KnowledgeGraphEntityValue;
            var entity_type = entity.GetTypeName();
            var record = new List<string>();
            //discover keys(aka "fields") dynamically via GetKeys
            foreach (var prop_name in entity.GetKeys())
            {
              var obj_val = entity[prop_name] ?? "null";
              record.Add(obj_val.ToString());
            }
            System.Diagnostics.Debug.WriteLine(
              $"{entity_type}[{e++}] " + string.Join(", ", record));
            //or use "Process a KnowledgeGraphRow Value" snippet
            //ProcessKnowledgeGraphRowValue(entity);
          }
        }
      }//WaitForRowsAsync
    }//SubmitSearch
    Call WaitForRowsAsync With Cancellation
    //On the QueuedTask...
    //and assuming you have established a connection to a knowledge graph
    //...
    //submit query or search to return a KnowledgeGraphCursor
    //using (var kg_rc = kg.SubmitQuery(kg_qf)) {
    //using (var kg_rc = kg.SubmitSearch(kg_sf)) {
    //...
    //wait for rows to be returned from the server
    //"auto-cancel" after 20 seconds
    var cancel = new CancellationTokenSource(new TimeSpan(0, 0, 20));
    //catch TaskCanceledException
    try
    {
      while (await kg_rc.WaitForRowsAsync(cancel.Token))
      {
        //check for row events
        while (kg_rc.MoveNext())
        {
          using (var graph_row = kg_rc.Current)
          {
            //Graph row is an array, process all returned values...
            var val_count = (int)graph_row.GetCount();
            for (int i = 0; i < val_count; i++)
            {
              var retval = graph_row[i];
              //Process row value (note: recursive)
              //See "Process a KnowledgeGraphRow Value" snippet
              ProcessKnowledgeGraphRowValue(retval);
            }
          }
        }
      }
    }
    //Timeout expired
    catch (TaskCanceledException tce)
    {
      //Handle cancellation as needed
    }
    cancel.Dispose();
    Requirements

    Target Platforms: Windows 11, Windows 10

    ArcGIS Pro version: 3.2 or higher.
    See Also