ElasticSearch Connector
Documentation
Version: 5
Documentation

ElasticSearch Connector - Source Code


<?xml version="1.0" encoding="utf-8"?>
<ApiConfig Name="ElasticSearch"
           Slug="elasticsearch-connector"
           Id="1e2e2142-9282-45d2-ac10-e0d5b61d1caa"
           Version="5"
           EngineVersion="17"
           Desc="Read / write ElasticSearch data inside your app; perform many ElasticSearch operations without coding, just use easy to use high performance API Connector for ElasticSearch"
           Logo="data:image/png;base64,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"
           >

  <VersionHistory> 
	<Change Ver="5" Date="2025-01-15" Type="New">Added caching for list_indexes, get_index_metadata.</Change>  
	<Change Ver="5" Date="2025-01-15" Type="New">Added extra columns for INSERT / UPDATE calls (e.g. ShardsTotal / ShardsFailed / ShardsSuccessful).</Change>  
	<Change Ver="5" Date="2025-01-15" Type="New">Added FailIf attribute for usecase like SSIS when INSERT / UPDATE output not consumed and record update/insert fails which needs to be reported as error. Previously it was silient about the error.</Change>  
	<Change Ver="5" Date="2025-01-15" Type="New">Added support for read geo_shape and geo_point</Change>  
	<Change Ver="5" Date="2025-01-15" Type="Fix">Fixed datatype issue with Index Insert/Update/Upsert operation. Now you can insert nested geo_point, geo_shape, nested and object type field as raw JSON (e.g. UPDATE MyIndex SET [tags]='["tag1", "tag2"]' ..) and object fields by its path (e.g. UPDATE MyIndex SET [my_object.field_1]=123 ..) </Change>  
	<Change Ver="5" Date="2025-01-15" Type="New">Added support alias in Metadata query</Change>  
	<Change Ver="5" Date="2025-01-15" Type="New">Added support for date, bool, int, long, double, float types (Previous version didn't detect datatypes)</Change>
	<Change Ver="5" Date="2025-01-15" Type="New">Added support for Mixed DateTime with Unix Epoch Timestamp for date type</Change>	
	<Change Ver="5" Date="2025-01-15" Type="New">Added support for dynamic metadata (See MetaDetectionOrder property under Advanced Parameters - Set to Dynamic)</Change>	
	<Change Date="2023-11-01" Type="New">Added support for password-less windows authentication (Use only if server supports it)</Change>	
	<Change Date="2023-09-10" Type="New">Added support for Alias (List/Read/Write)</Change>	
	<Change Date="2023-08-10" Type="New">Added IgnoreSSLCertificateErrors Property to support self-signed certificates (Ignore not trusted error)</Change>	
	<Change Date="2023-08-10" Type="New">Added two new endpoints (create_index, delete_index)</Change>
	<Change Date="2023-08-10" Type="Fix">Fixed pagination issue</Change>
    <Change Date="2021-12-08">Initial version</Change>
  </VersionHistory>
 <ServiceUrls>
    <ServiceUrl Name="Default" Url="http://localhost:9200" />
  </ServiceUrls>
  <Auths>
    <Auth Name="HTTP" Type="HTTP" Label="Basic Authentication (UserId/Password)" ConnStr="UserName=[$UserName$];Password=[$Password$]" TestEndPoint="list_indexes">
      <Notes>
        <![CDATA[
<h3>For Local / Hosted Instance by you</h3>
<ol>
	<li>Get your userid / password and enter on the connection UI</li>
</ol>	
<h3>For Managed Instance (By Bonsai search)</h3>
If your instance is hosted by bonsai then perform these steps to get your credentials for API call
<ol>
	<li>Go to https://app.bonsai.io/clusters/{your-instance-id}/tokens</li>
	<li>Copy Access Key and Access Secret and enter on the connection UI. Click Test connection.</li>
	<li>If your Cluster has no data you can generate sample data by visiting this URL and click Add Sample Data https://{your-cluster-id}.apps.bonsaisearch.net/app/home#/tutorial_directory</li>
</ol>		
]]>
      </Notes>
      <Params>    
        <Param Name="UserName" Label="User Name (or Access Key)" />    
        <Param Name="Password" Secret="true"  Label="Password (or Access Secret)" />   
		<Param Name="IgnoreSSLCertificateErrors" Label="Ignore certificate related errors" Options=";True;False" />  				 	
      </Params>
    </Auth>
	<Auth Name="WinAuth" Type="HTTP" Label="Windows Authentication (No Password)" ConnStr="CredentialType=Windows;" TestEndPoint="list_indexes" >
      <Params>    
		<Param Name="IgnoreSSLCertificateErrors" Label="Ignore certificate related errors"  Options=";True;False" />  				 	
      </Params>	
    </Auth>
  </Auths>


  <Template>
	<EndPoint>
		<Params>
			<Param Name="DoNotIndentArray" Value="True" Type="Property" Hidden="True" Desc="Keep This option to true if you want to read geo_shape and write to some other system. _bulk operations must have un-indented JSON string in API calls (each row must be in one line)."/> 			
			<Param Name="IgnoreSSLCertificateErrors" Label="Ignore certificate related errors"  Type="Property" Options=";True;False" Desc="Set this option to True if you are getting Certificate Not Trusted error and you like to continue regardless (Only do it if you trust the remote server). This usually happens when Self-Signed certificate is used on ElasticSearch Instance and you did not trust that certificate on this machine" /> 
		</Params>
	</EndPoint> 

	<EndPoint Name="IndexParams">
      <Params>
        <Param Name="Index" Label="Index" Type="Placeholder" Required="True" OptionsEndPoint="list_indexes;list_aliases" OptionsEndPointValueColumn="Name;Name" OptionsEndPointLabelColumn="Type,Name;Type,Name" />
      </Params>	
	</EndPoint>	
	<EndPoint Name="IndexOrAliasParams" Template="IndexParams">
      <Params>
		<Param Name="Alias" Label="Alias (Deprecated - Use Index instead)" Hidden="True" OptionsEndPoint="list_aliases" OptionsEndPointValueColumn="Name" />
      </Params>	
	</EndPoint>
  
	<EndPoint Name="DocWriteResponseColumns">
      <OutputColumns>
          <Column Name="P_errors" Label="ErrorFound" DataType="DT_BOOL" />
		  <Column Name="result" Label="Result" DataType="DT_WSTR" Length="4000"/>
		  <Column Name="status" Label="HttpStatus" DataType="DT_I4"/>
          <Column Name="_id" Label="Id" DataType="DT_WSTR" Length="50"/>
          <Column Name="_index" Label="Index" DataType="DT_WSTR" Length="150"/>
          <Column Name="_type" Label="Type" DataType="DT_WSTR" Length="50"/>
          <Column Name="error.index_uuid" Label="IndexUuid" DataType="DT_WSTR" Length="50"/>
          <Column Name="error.reason" Label="Reason" DataType="DT_WSTR" Length="4000"/>
          <Column Name="error.type" Label="ErrorType" DataType="DT_WSTR" Length="250"/>
		  <Column Name="error.caused_by.type" Label="ErrorCausedByType" DataType="DT_WSTR" Length="250"/>
		  <Column Name="error.caused_by.reason" Label="ErrorCausedByreason" DataType="DT_WSTR" Length="2000"/>          
          <Column Name="_version" Label="Version" DataType="DT_I4"/>          
          <Column Name="_seq_no" Label="SequenceNo" DataType="DT_I4"/>
          <Column Name="_primary_term" Label="PrimaryTerm" DataType="DT_I4"/>		  
		  <Column Name="_shards.failed" Label="ShardsFailed" DataType="DT_I4"/>		  
		  <Column Name="_shards.successful" Label="ShardsSuccessful" DataType="DT_I4"/>		  
		  <Column Name="_shards.total" Label="ShardsTotal" DataType="DT_I4"/>		
		  <Column Name="P_took" Label="Took" DataType="DT_I4" />		  
      </OutputColumns>	
	</EndPoint>
	<EndPoint Name="DocInputColumns" Template="IndexOrAliasParams" FailIf="ExpressionFoundNotHandled" FailIfExpression="*P_errors=true">
      <InputColumns>
          <Column Name="_id" Key="True" ExcludeFromRowMap="True" DataType="DT_WSTR" Length="150" />
          <Column Name="[$parent.Pivot_Path$]"
                  Expand="True" 
                  DataEndPoint="get_index_metadata"
                  DataEndPointParameters="Index=[$Index$];Alias=[$Alias$]"
                  ColumnInfoMap="Name=Pivot_Path;DataType=Pivot_Value.type;Raw=Pivot_Value.type"
                  RawInfoMap="nested;{null};geo_shape;geo_point"
                  DataTypeMap="DT_WSTR=text;DT_I2=short;DT_I1=byte;DT_I8=long;DT_UI8=unsigned_long;DT_I4=integer;DT_R8=float,double,half_float,scaled_float;DT_DBTIMESTAMP=date;DT_TEXT=binary;DT_BOOL=boolean;DT_NTEXT=nested,{null},geo_shape"
                  />
        <Column Name="[$parent.Pivot_Path$].lat"
                Label="[$parent.Pivot_Path$].lat"
                Expand="True"
                DataEndPoint="get_index_metadata"
				DataEndPointWhere="[Pivot_Value.type] IN ('geo_point')"
                DataEndPointParameters="Index=[$Index$];Alias=[$Alias$]"
				DataType="DT_R8"
                />
        <Column Name="[$parent.Pivot_Path$].lon"
                Label="[$parent.Pivot_Path$].lon"
                Expand="True"
                DataEndPoint="get_index_metadata"
				DataEndPointWhere="[Pivot_Value.type] IN ('geo_point')"
                DataEndPointParameters="Index=[$Index$];Alias=[$Alias$]"
				DataType="DT_R8"
                />
        <Column Name="[$parent.Pivot_Path$].type"
                Label="[$parent.Pivot_Path$].type"
                Expand="True"
                DataEndPoint="get_index_metadata"
				DataEndPointWhere="[Pivot_Value.type] IN ('geo_shape')"
                DataEndPointParameters="Index=[$Index$];Alias=[$Alias$]"
				DataType="DT_WSTR" Length="30"
                />
        <Column Name="[$parent.Pivot_Path$].coordinates"
                Label="[$parent.Pivot_Path$].coordinates"
                Expand="True"
                DataEndPoint="get_index_metadata"
				DataEndPointWhere="[Pivot_Value.type] IN ('geo_shape')"
                DataEndPointParameters="Index=[$Index$];Alias=[$Alias$]"
				DataType="DT_TEXT"
				Raw="True"
                />	  				  
      </InputColumns>	  
	</EndPoint>
	<EndPoint Name="DocOutputColumns" Template="IndexOrAliasParams">
      <OutputColumns>
        <Column Name="_id" Label="_id" DataType="DT_WSTR" Length="150" />
        <Column Name="_score" Label="_score"  DataType="DT_R8"/>
        <Column Name="_source.[$parent.Pivot_Path$]"
                Label="[$parent.Pivot_Path$]"
                Expand="True"
                DataEndPoint="get_index_metadata"
				DataEndPointWhere="[Pivot_Value.type] NOT IN ('geo_point','geo_shape') OR [Pivot_Value.type] IS NULL"
                DataEndPointParameters="Index=[$Index$];Alias=[$Alias$]"
                ColumnInfoMap="Name=Pivot_Path;DataType=Pivot_Value.type;Raw=Pivot_Value.type"
                RawInfoMap="nested;{null};geo_shape;geo_point"
                DataTypeMap="DT_WSTR=text;DT_I2=short;DT_I1=byte;DT_I8=long;DT_UI8=unsigned_long;DT_I4=integer;DT_R8=float,double,half_float,scaled_float;DT_DBTIMESTAMP=date;DT_TEXT=binary;DT_BOOL=boolean;DT_NTEXT=nested,{null},geo_shape"
                />
        <Column Name="_source.[$parent.Pivot_Path$].lat"
                Label="[$parent.Pivot_Path$].lat"
                Expand="True"
                DataEndPoint="get_index_metadata"
				DataEndPointWhere="[Pivot_Value.type] IN ('geo_point')"
                DataEndPointParameters="Index=[$Index$];Alias=[$Alias$]"
				DataType="DT_R8"
                />
        <Column Name="_source.[$parent.Pivot_Path$].lon"
                Label="[$parent.Pivot_Path$].lon"
                Expand="True"
                DataEndPoint="get_index_metadata"
				DataEndPointWhere="[Pivot_Value.type] IN ('geo_point')"
                DataEndPointParameters="Index=[$Index$];Alias=[$Alias$]"
				DataType="DT_R8"
                />
        <Column Name="_source.[$parent.Pivot_Path$].type"
                Label="[$parent.Pivot_Path$].type"
                Expand="True"
                DataEndPoint="get_index_metadata"
				DataEndPointWhere="[Pivot_Value.type] IN ('geo_shape')"
                DataEndPointParameters="Index=[$Index$];Alias=[$Alias$]"
				DataType="DT_WSTR" Length="30"
                />
        <Column Name="_source.[$parent.Pivot_Path$].coordinates"
                Label="[$parent.Pivot_Path$].coordinates"
                Expand="True"
                DataEndPoint="get_index_metadata"
				DataEndPointWhere="[Pivot_Value.type] IN ('geo_shape')"
                DataEndPointParameters="Index=[$Index$];Alias=[$Alias$]"
				DataType="DT_TEXT"
                />				
      </OutputColumns>	
	</EndPoint>
    <EndPoint Name="ScrollWithPagination" 
	          Template="DocOutputColumns"	
	          Url="/[$tag$]" Method="POST" ContentType="application/json" 
              Body="[$tag$]"
              Body1="{ &quot;from&quot;: {$$page_num$$}, &quot;size&quot;: [$PagingIncrementBy$], &quot;query&quot;: {  &quot;query_string&quot;: {&quot;query&quot;: &quot;[$Query$]&quot;}  } }"
              IncludeParentColumns="True"
              >
      <Params>
        <Param Name="Query" Label="Enter Query (JSON Format)"
               Value="{&quot;match_all&quot;: { }  }"
               HelpLink="https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html"
               Options="All Records={&quot;match_all&quot;: { }  };Record where comment or name contains TV word={&quot;query_string&quot;: {&quot;query&quot;: &quot;comment:TV OR name:TV&quot;}  };Record with comment field (attribute exists)={&quot;query_string&quot;: {&quot;query&quot;: &quot;_exists_:comment&quot;}  }"
        />
        
        <Param Name="CursorTimeout" Value="10" Options="1;2;5;10;60;180;" Hidden="True" Label="CursorTimeout (Minutes)" Desc="Enter this value carefully. Do not enter very long timeout else it will hold cursor longer on server memory space"  />
        <Param Name="PageSize" Value="1000" Hidden="True" Label="How many Record to fetch per request" Desc="Do not enter very large number or too small number to avoid performance issues." />

		<Param Name="Filter" Type="Property" Hidden="False" Value="$.hits.hits[*]" Options="Default Filter=$.hits.hits[*];All properties (Must set Meta detection order to Dynamic)=$.hits.hits[*]._source;All properties from nested array (Must set Meta detection order to Dynamic)=$.hits.hits[*]._source.some_child_array[*]" />	
        <Param Name="NextUrlAttributeOrExpr" Type="Property" Value="$._scroll_id" />
        <Param Name="StopIndicatorAttributeOrExpr" Type="Property" Value="$.hits.hits[0]._id" />
        <Param Name="NextUrlEndIndicator" Type="Property" Value="regex=^$" Desc="Stop pagination when blank value detected for _id."/>
        <Param Name="EnablePageTokenForBody" Type="Property" Value="True" />
        <Param Name="HasDifferentNextPageInfo" Type="Property" Value="True" />
        <Param Name="PagePlaceholders" Type="Property" Value="{}" ValueTemplate="url=&lt;&lt;[$Alias$]|~|[$Index$]|~|$1,FUN_IF_NULL_OR_EMPTY&gt;&gt;/_search?scroll=[$CursorTimeout$]m|_search/scroll" />
        <Param Name="FirstPageBodyPart" Type="Property" Value="{}" ValueTemplate="{ &quot;size&quot;: [$PageSize$],  &quot;query&quot;: [$Query$] }" />
        <Param Name="NextPageBodyPart" Type="Property" Value="{}" ValueTemplate="{  &quot;scroll&quot; : &quot;[$CursorTimeout$]m&quot;, &quot;scroll_id&quot;: &quot;[$pagetoken$]&quot; }" />
        <Param Name="MetaDetectionOrder" Hidden="False" Type="Property" PropertyScope="EndPoint" Value="Default" Options="Default;Dynamic;Static;StaticDynamic;StaticDynamicVirtual;MergeStaticDynamic"/>
		
      </Params>

    </EndPoint>    
  </Template>

  <EndPoints>
    <!--=====================================
        =========== CREATE INDEX ============
        =====================================-->  
    <EndPoint Name="create_index" Label="Create Index" Desc="Create a new index"
	            Url="/[$Name$]" Method="PUT" ContentType="application/json" 
              >
	  <Params>
		<Param Name="Name" Label="New Index Name" Required="True"/>
		<Param Name="ContineOnErrorForStatusCode" Type="Property" Value="True" />
		<Param Name="ErrorStatusCodeToMatchRegex" Type="Property" Value="400" />
		<Param Name="ConsumeResponseOnError" Type="Property" Value="True" />
	  </Params>
      <OutputColumns>
        <Column Name="acknowledged" Label="Acknowledged" DataType="DT_BOOL" />    
        <Column Name="acknowledged" Label="Name" DataType="DT_WSTR" Length="255" ValueTemplate="[$Name$]"/> 		
        <Column Name="shards_acknowledged" Label="ShardsAcknowledged" DataType="DT_BOOL" />      
        <Column Name="index" Label="Index" DataType="DT_WSTR" Length="150"/>      
      </OutputColumns>
    </EndPoint>    
    <!--=====================================
        =========== DELETE INDEX ============
        =====================================-->  
    <EndPoint Name="delete_index" Label="Delete Index" Desc="Delete an exising index"
	            Url="/[$Name$]" Method="DELETE" ContentType="application/json" 
              >
	  <Params>
		<Param Name="Name" Label="Index to delete" Required="True" OptionsEndPoint="list_indexes" OptionsEndPointValueColumn="Name" />
		<Param Name="ContineOn404Error" Type="Property" Value="True" />
		<Param Name="ConsumeResponseOnError" Type="Property" Value="True" />
	  </Params>			  
      <OutputColumns>
        <Column Name="acknowledged" Label="Acknowledged" DataType="DT_BOOL" />      
		<Column Name="acknowledged" Label="Name" DataType="DT_WSTR" Length="255" ValueTemplate="[$Name$]"/>  
        <Column Name="status" Label="ErrorStatus" DataType="DT_I4" />      
        <Column Name="error.reason" Label="ErrorReason" DataType="DT_WSTR" Length="1000"/>      
		<Column Name="error.type" Label="ErrorType" DataType="DT_WSTR" Length="255"/>      
		<Column Name="error.resource.id" Label="ErrorId" DataType="DT_WSTR" Length="255"/>  
		<Column Name="error.index" Label="ErrorIndex" DataType="DT_WSTR" Length="255"/>  
      </OutputColumns>
    </EndPoint>    	
	
    <!--=====================================
        =========== LIST INDEXES ============
        =====================================-->  
    <EndPoint Name="list_indexes" Label="List indexes" Desc="Lists indexes"
				CachedTtl="5"
	            Url="/_cat/indices?format=json&amp;pretty" Method="GET" ContentType="application/json" Filter="$"
              >
      <OutputColumns>
        <Column Name="index" Label="Name" DataType="DT_WSTR" Length="4000"/>      
        <Column Name="uuid" Label="Uuid" DataType="DT_WSTR" Length="50"/>      
        <Column Name="status" Label="Status" DataType="DT_WSTR" Length="50"/>      
        <Column Name="health" Label="Health" DataType="DT_WSTR" Length="50"/>      
        <Column Name="pri" Label="Pri" DataType="DT_I4"/>      
        <Column Name="pri" Label="Rep" DataType="DT_I4"/>      
        <Column Name="docs.count" Label="DocsCount" DataType="DT_I4"/>      
        <Column Name="docs.deleted" Label="DocsDeleted" DataType="DT_I4"/>      
        <Column Name="store.size" Label="StoreSize" DataType="DT_WSTR" Length="50"/>      
        <Column Name="pri.store.size" Label="PriStoreSize" DataType="DT_WSTR" Length="50"/>  
        <Column Name="uuid" Label="Type" DataType="DT_WSTR" Length="10" ValueTemplate="INDEX"/>      		
      </OutputColumns>
    </EndPoint>

    <!--=====================================
        =========== LIST ALIASES ============
        =====================================-->  
    <EndPoint Name="list_aliases" Label="List aliases" Desc="Lists aliases"
	          IncludeParentColumns="True" Url="/_aliases?format=json&amp;pretty" Method="GET" Filter="$..aliases"
              CachedTtl="5"
			  >
      <Params>
        <Param Name="EnableCustomReplace" Type="Property" Value="True" />
        <Param Name="SearchFor" Type="Property" Value="&quot;(\w+(?&lt;!aliases))&quot;\s*:\s*\{\s*\}--regex" />
        <Param Name="ReplaceWith" Type="Property" Value="&quot;$1&quot;: {fake:1}" />
        <Param Name="EnablePivot" Type="Property" Value="True" />
		<Param Name="IncludePivotPath" Type="Property" Value="True" />
		<Param Name="EnablePivotPathSearchReplace" Type="Property" Value="True" />
		<Param Name="PivotPathSearchFor" Type="Property" Value="(.*?).aliases.(.*)--regex" />
		<Param Name="PivotPathReplaceWith" Type="Property" Value="$1" />
		
      </Params>	  			
      <OutputColumns>
        <Column Name="Pivot_Name" Label="Name" DataType="DT_WSTR" Length="500"/>     
		<Column Name="Pivot_Path" Label="Index" DataType="DT_WSTR" Length="500"/>     
		<Column Name="Pivot_Name" Label="Type" DataType="DT_WSTR" Length="10" ValueTemplate="ALIAS"/>
      </OutputColumns>
    </EndPoint>    

   
    <!--=====================================
        ======== GET INDEX METADATA =========
        =====================================-->  
    <EndPoint Name="get_index_metadata" Label="Get Index or Alias metadata" Desc="Gets index or alias metadata" 
	          CachedTtl="5"
	          Url="/&lt;&lt;[$Alias$]|~|[$Index$]|~|$1,FUN_IF_NULL_OR_EMPTY&gt;&gt;/_mappings" Method="GET" ContentType="application/json" IncludeParentColumns="True"
              Filter="$..properties" 
			  Template="IndexOrAliasParams"
			  >
      <Params>
        <Param Name="EnablePivot" Type="Property" Value="True" />
        <Param Name="IncludePivotPath" Type="Property" Value="True" />
        <Param Name="EnablePivotPathSearchReplace" Type="Property" Value="True" />
        <Param Name="PivotPathSearchFor" Type="Property" Value="-" ValueTemplate="^[$Alias$].mappings.|^[$Index$].mappings.|properties.--regex" />
        <Param Name="PivotPathReplaceWith" Type="Property" Value="" />
      </Params>
      <OutputColumns>
        <Column Name="Pivot_Path" Label="Path" DataType="DT_WSTR" Length="4000"/>
        <Column Name="Pivot_Name" Label="Name" DataType="DT_WSTR" Length="4000"/>
        <Column Name="Pivot_Value.type" Label="Type" DataType="DT_WSTR" Length="4000"/>      
        <Column Name="Pivot_Value.fields.keyword.ignore_above" Label="Length" DataType="DT_I4" />      
      </OutputColumns>
    </EndPoint>    

    <!--=====================================
        ========== GET DOCUMENTS ============
        =====================================-->  
    <EndPoint Name="get_documents" Label="Get documents from Index or Alias" Desc="Gets documents from Index or Alias"
	            Template="ScrollWithPagination" HelpLink="https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html"
              >
    </EndPoint>
    <!--=====================================
        ========== GET DOCUMENT BY ID ============
        =====================================-->  

    <EndPoint Name="get_document" 
                  Template="DocOutputColumns"
                  Label="Get document by ID from Index or Alias"
                  Url="/&lt;&lt;[$Alias$]|~|[$Index$]|~|$1,FUN_IF_NULL_OR_EMPTY&gt;&gt;/_doc/[$Id$]" Method="GET" ContentType="application/json" 
				  Filter=""
                  Body="{ &quot;query&quot;: [$Query$] }"
                  IncludeParentColumns="True"
				  
              >
      <Params>
        <Param Name="Id" Label="Enter Document ID"
                       Value="" Required="True" IsKey="True" ReadAs="_id"
               />
      </Params>
    </EndPoint>    
    
    <!--=====================================
        ============== SEARCH ===============
        =====================================-->  
    <EndPoint Name="search" Label="Search / Query documents" Desc="Gets documents (Using JSON Query Language)"
                 Template="ScrollWithPagination" HelpLink="https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html"
              >
    </EndPoint>

    <!--=====================================
        ========== COUNT DOCUMENTS ============
        =====================================-->

    <EndPoint Name="count" Label="Count documents"
                  Url="/[$Index$]/_count" Method="POST" ContentType="application/json"
                  Body="{ &quot;query&quot;: [$Query$] }"
                  IncludeParentColumns="True"
              >
      <Params>
        <Param Name="Index" MultiSelect="True" MultiSelectSeparator="," Label="Index (choose one --OR-- enter * --OR-- comma seperated names)" 
			Desc="You can enter index name(s) for which you like to perform document count. Enter * (asterisk) to perform search across all indices or comma seperate list (i.e. myidx1,myidx2) or select one from the populated list." 
			Type="Placeholder" Required="True"  OptionsEndPoint="list_indexes;list_aliases" OptionsEndPointValueColumn="Name;Name"  OptionsEndPointLabelColumn="Type,Name;Type,Name" />
		
		<Param Name="Query" Label="Enter Query (JSON Format)" Required="True"
               Value="{&quot;match_all&quot;: { }  }"
               HelpLink="https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html"
               
               Options="All Records={&quot;match_all&quot;: { }  };Record where comment or name contains TV word={&quot;query_string&quot;: {&quot;query&quot;: &quot;comment:TV OR name:TV&quot;}  };Record with comment field (attribute exists)={&quot;query_string&quot;: {&quot;query&quot;: &quot;_exists_:comment&quot;}  }"
        />
      </Params>
      <OutputColumns>
        <Column Name="count" DataType="DT_I8" />
      </OutputColumns>
    </EndPoint>
    
    <!--=====================================
        ========= INSERT DOCUMENTS ==========
        =====================================-->  
    <EndPoint Name="insert_documents" Label="Insert documents" Desc="Insert documents"
	            Url="/_bulk" Method="POST" ContentType="application/json" Filter="items[*].create"
              DotAsPath="True" JsonRowFormat="Multicontent"
              UseRowLevelHeaderFooter="True"          
              RowFooter="\n"
              BatchSize="2000"
              IncludeParentColumns="True"
			  Template="DocInputColumns,DocWriteResponseColumns"
              >
      <Params>
        <Param Name="DoNotAddMultiContentSeparator" Type="Property" Value="True" />
        <Param Name="RowHeaderFooterContinueOnError" Type="Property" Value="True" />
        <Param Name="RowHeader" NoPlaceholder="True" Value="" ValueTemplate="{ &quot;create&quot; : { &quot;_index&quot;: &quot;[$Index$]&quot; &lt;&lt;&lt;%_id%&gt;|~| |~|, &quot;_id&quot;:&quot;$1&quot;,FUN_IF_NULL_OR_EMPTY&gt;&gt; } }\n" Type="Property"/>
      </Params>
      <Body>{$rows$}</Body>
    </EndPoint>
	
    <!--=====================================
        ========= UPSERT DOCUMENTS ==========
        =====================================-->  
    <EndPoint Name="upsert_documents" Label="Upsert documents" Desc="Insert Or Update (Upserts) documents. If _id column not supplied then this acts like INSERT call. If _id column supplied and its found then UPDATE action happens else INSERT. Look at the Result column in the output to see if document was created or updated."
	          Url="/_bulk" Method="POST" ContentType="application/json" Filter="items[*].index"
              DotAsPath="True" JsonRowFormat="Multicontent"
              RowFooter="\n"
              BatchSize="2000"
              IncludeParentColumns="True"
			  Template="DocInputColumns,DocWriteResponseColumns"
              >
      <Params>
        <Param Name="RowHeaderFooterContinueOnError" Type="Property" Value="True" />
        <Param Name="RowHeader" NoPlaceholder="True" Value="" ValueTemplate="{ &quot;index&quot; : { &quot;_index&quot;: &quot;[$Index$]&quot; &lt;&lt;&lt;%_id%&gt;|~| |~|, &quot;_id&quot;:&quot;$1&quot;,FUN_IF_NULL_OR_EMPTY&gt;&gt; } }\n" Type="Property"/>
      </Params>
      <Body>{$rows$}</Body>     
 
    </EndPoint>   
	
    <!--=====================================
        ========= UPDATE DOCUMENTS ==========
        =====================================-->  
    <EndPoint Name="update_documents" Label="Update documents" Desc="Update documents"
	            Url="/_bulk" Method="POST" ContentType="application/json" Filter="items[*].update"
              DotAsPath="True" JsonRowFormat="Multicontent"
              RowFooter="} \n"
              BatchSize="2000"
              IncludeParentColumns="True"
			  Template="DocInputColumns,DocWriteResponseColumns"
              >
      <Params>      
          <Param Name="DoNotAddMultiContentSeparator" Type="Property" Value="True" />
          <Param Name="RowHeaderFooterContinueOnError" Type="Property" Value="True" />
          <Param Name="RowHeader" NoPlaceholder="True" Value="" ValueTemplate="{ &quot;update&quot; : { &quot;_index&quot;: &quot;[$Index$]&quot; &lt;&lt;&lt;%_id%&gt;|~| |~|, &quot;_id&quot;: &quot;$1&quot;,FUN_IF_NULL_OR_EMPTY&gt;&gt; } }\n{ &quot;doc&quot;: " Type="Property"/>          
      </Params>
      <Body>{$rows$}</Body>    
     </EndPoint>

    <!--=====================================
        ======== DELETE DOCUMENTS ===========
        =====================================-->  
    <EndPoint Name="delete_documents" Label="Delete documents" Desc="Deletes documents"
	          Url="/_bulk" Method="POST" ContentType="application/json"
              DotAsPath="True" JsonRowFormat="Multicontent"
              Body="{$rows$}"
              UseRowLevelHeaderFooter="True"          
              RowFooter="\n"
              BatchSize="2000"
              Filter="$.items[*].delete"
              IncludeParentColumns="True"
			  Template="DocWriteResponseColumns"
              >
      <Params>
        <Param Name="DoNotAddMultiContentSeparator" Type="Property" Value="True" />
        <Param Name="Index" Type="Placeholder"/>   
      </Params>
      <LayoutMap>
        <![CDATA[<?xml version="1.0" encoding="utf-8"?>
<settings>
  <dataset id="root" readfrominput="True" />
  <map name="delete">
      <map name="_id" src="_id"  />
      <map name="_index" value="[$Index,FUN_XMLENC$]"  />
  </map>  
</settings>]]>
      </LayoutMap>
      <InputColumns>
          <Column Name="_id" Key="True" ExcludeFromRowMap="True" DataType="DT_WSTR" Length="150" />        
      </InputColumns>
    </EndPoint>   

  </EndPoints>

  <Tables>
    <Table Name="Indexes" SelectEndPoint="list_indexes" />
    <Table Name="Metadata" SelectEndPoint="get_index_metadata" />
    <Table Name="[$parent.index$]" 
           Expand="True"
           Group="Index"
		   SelectEndPoint="get_documents"
           LookupEndPoint="get_document"
           UpdateEndPoint="update_documents"
           UpsertEndPoint="upsert_documents"
           DeleteEndPoint="delete_documents"
           InsertEndPoint="insert_documents"
           DataEndPoint="list_indexes">
      <Params>
        <Param Name="Index" Value="[$parent.index$]" Hidden="True"/>
      </Params>
    </Table>
	
	<Table Name="[$parent.Pivot_Name$]" 
		   Group="Alias"	
           Expand="True"
           SelectEndPoint="get_documents"
           LookupEndPoint="get_document"
           UpdateEndPoint="update_documents"
           UpsertEndPoint="upsert_documents"
           DeleteEndPoint="delete_documents"
           InsertEndPoint="insert_documents"
           DataEndPoint="list_aliases">
      <Params>
		<Param Name="Index" Value="[$parent.Pivot_Path$]" Hidden="True"/>
        <Param Name="Alias" Label="Alias (Deprecated - Use Index instead)" Hidden="True" Value="[$parent.Pivot_Name$]" />
      </Params>	  
    </Table>          
  </Tables>


  <!--=====================================
      ============ EXAMPLES ===============
      =====================================--> 

  <!-- LIST INDEXES -->
  <Examples>
    <Example Group="ODBC" Label="Create a new index (i.e. Table)" Desc="Create a new index (i.e. Create a new table). To trow error if table exists you can set ContineOnErrorForStatusCode=0">
       <Code>
          <![CDATA[SELECT * FROM create_index WITH(Name='my_new_index_name', ContineOnErrorForStatusCode=1)]]>
       </Code>
    </Example>
    <Example Group="ODBC" Label="Delete an exising index (i.e. Table)" Desc="Delete an exising index. It it exists it will show status code 400">
       <Code>
          <![CDATA[SELECT * FROM delete_index WITH(Name='my_index_name', ContineOn404Error=1 )]]>
       </Code>
    </Example>
    <Example Group="ODBC" Label="Generic API Call for ElasticSearch" Desc="When EndPoint not defined and you like to call some API use this way. Below example shows how to call CREATE INDEX API generic way. See other generic API call examples.">
       <Code>
          <![CDATA[SELECT * FROM generic_request 
WITH(Url='/my_index_name'
	, RequestMethod='PUT'
--	, Body='{}'
--	, Headers='X-Hdr1:aaa || x-HDR2: bbb'
	, Meta='acknowledged:bool'
	)]]>
       </Code>
    </Example>
	
    <Example Group="ODBC" Label="List indexes" Desc="Lists indexes" Default="True">
       <Code>
          <![CDATA[SELECT * FROM Indexes]]>
       </Code>
    </Example>

    <!-- GET INDEX METADATA -->
    <Example Group="ODBC" Label="Get index metadata" Desc="Gets index metadata">
       <Code>
          <![CDATA[SELECT * FROM get_index_metadata WITH (Index='my_index_name')]]>
       </Code>
    </Example>
	
    <!-- GET DOCUMENTS FROM INDEX -->
    <Example Group="ODBC" Label="Read ElasticSearch documents from Index (all or with filter)" Desc="Gets documents by index name (i.e. Table name) or alias name (i.e. View name). Using WHERE clause invokes client side engine so try to avoid WHERE clause and use WITH clause QUERY attribute. Use search endpoint instead to invoke query.">
       <Code>
          <![CDATA[SELECT * FROM MyIndexOrAliasName --WITH(Query='{"match": { "PartNumber" : "P50" } }')]]>
       </Code>
    </Example>
    <!-- GET DOCUMENTS FROM INDEX -->
    <Example Group="ODBC" Label="Read ElasticSearch documents from Alias (all or with filter)" Desc="Gets documents by index name (i.e. Table name) or alias name (i.e. View name). Using WHERE clause invokes client side engine so try to avoid WHERE clause and use WITH clause QUERY attribute. Use search endpoint instead to invoke query.">
       <Code>
          <![CDATA[SELECT * FROM MyIndexOrAliasName --WITH(Query='{"match": { "PartNumber" : "P50" } }')]]>
       </Code>
    </Example>	
    
    <!-- Search DOCUMENTS from Index-->
    <Example Group="ODBC" Label="Search documents from Index using ElasticSearch Query language" Desc="Below example shows how to search on a comment field for TV word anywhere in the text for Index named MyIndexOrAliasName (it can be index name or alias name). For more information on ElasticSearch Query expression check this link https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html">
      <Code>
        <![CDATA[
		SELECT * FROM MyIndexOrAliasName WITH(Query='{"match": { "comment" : "TV" } }')
		
		--or use below - slight faster (avoids table / alias list validation)
		--SELECT * FROM search WITH(Index='MyIndexName', Query='{"match": { "comment" : "TV" } }')
		--SELECT * FROM search WITH(Index='MyIndexName', Alias='MyAliasName', Query='{"match": { "comment" : "TV" } }')
		]]>
      </Code>
    </Example>
	
    <!-- Search DOCUMENTS from Alias-->
    <Example Group="ODBC" Label="Search documents from Alias using ElasticSearch Query language" Desc="Below example shows how to search on Alias rather than Index name. Alias is build on index (consider like a view in RDBMS). This example filtes data from Alias with some condition in the Query Text. For more information on ElasticSearch Query expression check this link https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html">
      <Code>
        <![CDATA[
		
		SELECT * FROM MyAliasName WITH(Query='{"match": { "comment" : "TV" } }')
		
		--or use search endpoint then you must supply both Index name and Alias name 
		--calling /search endpoint in FROM clause is slight faster (avoids table / alias list validation)
		--SELECT * FROM search WITH(Index='MyIndexName',Index='MyAliasName', Query='{"match": { "comment" : "TV" } }')
		
		]]>
      </Code>
    </Example>

    <Example Group="ODBC" Label="Count ElasticSearch index documents using ElasticSearch Query language" Desc="Below example shows how to get just count of documents from Index (single, multiple or all index). Optionally you can supply expression to filter. For more information on ElasticSearch Query expression check this link https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html">
      <Code>
        <![CDATA[
SELECT * FROM count WITH(Index='MyIndexOrAliasName') --//get count of documents in index / alias named MyIndexOrAliasName
SELECT * FROM count WITH(Index='*') --//get count of documents in all indices (total distinct _id found across all indices + alias) 
SELECT * FROM count WITH(Index='MyIndex1,MyIndex2,MyAlias1,MyAlias2')--//get count of documents in indices named MyIndex1, MyIndex2 and Alias named MyAlias1,MyAlias2
SELECT * FROM count WITH(Index='MyIndexOrAliasName', Query='{"match": { "comment" : "TV" } }') --//get count of documents in MyIndex where comment field contains word "TV"
]]>
      </Code>
    </Example>
	
    <Example Group="ODBC" Label="Count ElasticSearch alias documents using ElasticSearch Query language" Desc="Below example shows how to get just count of documents from Alias (single, multiple or all alias). Optionally you can supply expression to filter. For more information on ElasticSearch Query expression check this link https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html">
      <Code>
        <![CDATA[
SELECT * FROM count WITH(Index='MyIndexOrAliasName') --//get count of documents in index / alias named MyIndexOrAliasName
SELECT * FROM count WITH(Index='*') --//get count of documents in all indices (total distinct _id found across all indices + alias)
SELECT * FROM count WITH(Index='MyIndexOrAlias1,MyIndexOrAlias2') --//get count of documents in MyIndex1 and MyIndex2
SELECT * FROM count WITH(Index='MyIndex', Query='{"match": { "comment" : "TV" } }') --//get count of documents in Index named MyIndex where comment field contains word "TV"
SELECT * FROM count WITH(Index='MyAlias', Query='{"match": { "comment" : "TV" } }') --//get count of documents in Alias named MyAlias where comment field contains word "TV"
]]>
      </Code>
    </Example>	
    
    <!-- Search DOCUMENTS-->
    <Example Group="ODBC" Label="Using JSON Array / Value functions" Desc="Below example shows how to select specific elements from value array or use JSON PATH expression to extract from document array">
      <Code>
        <![CDATA[SELECT _id
        , JSON_ARRAY_FIRST(colors) as first_color
        , JSON_ARRAY_LAST(colors) as last_color
        , JSON_ARRAY_NTH(colors,3) as third_color
        , JSON_VALUE(locationList,'$.locationList[0].country') as first_preferred_country
        , JSON_VALUE(locationList,'$.locationList[?(@country=='India')].capital as capital_of_india
FROM shop WHERE _Id='1']]>
      </Code>
    </Example>
    

    <!-- INSERT DOCUMENTS INTO INDEX -->
    <Example Group="ODBC" Label="Insert documents into index with _id autogenerated" Desc="When you dont supply _id column value, ElasticSearch will generate it automatically for you.">
       <Code>
          <![CDATA[INSERT INTO MyIndex([MyCol1], [MyCol2] ) VALUES (100, 'A1')]]>
       </Code>
    </Example>
    
    <!-- INSERT DOCUMENTS INTO INDEX with _id-->
    <Example Group="ODBC" Label="Insert documents into index with your own _id" Desc="Inserts documents into index with _id column. _id is string datatype so can be ">
      <Code>
        <![CDATA[INSERT INTO MyIndex(_id, [MyCol1], [MyCol2] ) VALUES ('A1234', 100, 'A1')]]>
      </Code>
    </Example>

    <!-- INSERT DOCUMENTS INTO INDEX with _id-->
    <Example Group="ODBC" Label="Insert documents using nested attribute and raw fragments (JSON sub-documents, arrays)" 
             Desc="This example produces JSON document like this {&quot;_id&quot;: &quot;some_auto_generated_id&quot; , &quot;Location&quot;: { &quot;City&quot; : &quot;Atlanta&quot; , &quot;ZipCode&quot; : &quot;30060&quot; },&quot;ColorsArray &quot;: [&quot;Red&quot;, &quot;Blue&quot;, &quot;Green&quot;],&quot;SomeNestedDoc&quot;: { &quot;Col1&quot; : &quot;aaa&quot; , &quot;Col2&quot; : &quot;bbb&quot; , &quot;Col2&quot; : &quot;ccc&quot; }} . Notice that how Column name with Dot translated into nested Columns (i.e. City, ZipCode) and Prefix raw:: allowed to treat value as array or sub document.">
      <Code>
        <![CDATA[INSERT INTO MyIndexName ([Location.City], [Location.ZipCode], [raw::ColorsArray], [raw::SomeNestedDoc] )
--raw JSON must be in one line		
VALUES ('Atlanta', '30060', '["red","green","blue"]', '{"Col1":"aaa","Col2":"bbb","Col3":"ccc"}' )]]>
      </Code>
    </Example>
	
    <Example Group="ODBC" Label="Insert documents using various data types" 
             Desc="This example shows how to insert values for different datatype fields. Some fields can accept value as Raw JSON (e.g. nested, object, geo_point, geo_shape). Object field type can also accept value by nested field (e.g. [object_field.field1] )">
      <Code>
        <![CDATA[INSERT INTO my_index (
	binary_field,
	boolean_field,
	byte_field,
	date_field,
	double_field,
	float_field,
	geo_point_field,  --raw
	--OR--
	--"geo_point_field.lat",
	--"geo_point_field.lon",
	
	geo_shape_field,  --raw
	--OR--
	--"geo_shape_field.type",
	--"geo_shape_field.coordinates",
	
	integer_field,
	ip_field,
	keyword_field,
	long_field,
	nested_field, --raw

	object_field, --raw
	--OR--
	--"object_field.field1",
	--"object_field.field2",
	
	short_field,
	text_field
)
VALUES(
	'SGVsbG8gd29ybGQ=', --binary_field  --base64 value of "Hello world"
	false, --bool
	117, --byte_field
	'2012-12-31T23:59:59.123', --date_field
	1.123456789, --double_field
	1.123456789, --float_field
	--raw JSON must be in one line
	'{ "lat": 40.7128, "lon": -74.0060 }', --geo_point_field
	--OR--
	-- 40.7128, -74.0060,
	
	'{ "type": "polygon", "coordinates": [[[-74.0060, 40.7128], [-73.9960, 40.7128], [-73.9960, 40.7028], [-74.0060, 40.7028], [-74.0060, 40.7128]]] }', --geo_shape_field
	--OR--
	--'polygon',
	--'[[[-74.0060, 40.7128], [-73.9960, 40.7128], [-73.9960, 40.7028], [-74.0060, 40.7028], [-74.0060, 40.7128]]]',
	
	123, --integer_field
	'127.0.0.1', --ip_field
	'thhi is text', --keyword_field
	1234567890, --long_field
	--raw JSON must be in one line
	'[{"nested_property_1":"nested text 1", "nested_property_2":100}, {"nested_property_1":"nested text 2", "nested_property_2":101}]', --nested_field
	'{"field1":"A","field2":"B"}', --object_field (Raw Value)
	--OR--
	--'object field keyword 1', --object_field.field1
	--123,                       --object_field.field2	
	1, --short_field
	'text field ' --text_field

)]]>
      </Code>
    </Example>
    <Example Group="ODBC" Label="Update documents using various data types" 
             Desc="This example shows how to update values for different datatype fields. Some fields can accept value as Raw JSON (e.g. nested, object, geo_point, geo_shape). Object field type can also accept value by nested field (e.g. [object_field.field1] )">
      <Code>
        <![CDATA[UPDATE my_index
SET
	binary_field='SGVsbG8gd29ybGQ=', --base64 value of "Hello world"
	boolean_field=false, 
	byte_field=117, 
	date_field='2012-12-31T23:59:59.123', 
	double_field=1.123456789, 
	float_field=1.123456789, 
	--raw JSON must be in one line
	geo_point_field='{ "lat": 40.7128, "lon": -74.0060 }',
	--OR--
	--"geo_point_field.lat"=40.7128, 
	--"geo_point_field.lon"=-74.0060, 
		
	--raw JSON must be in one line
	geo_shape_field='{ "type": "polygon", "coordinates": [[[-74.0060, 40.7128], [-73.9960, 40.7128], [-73.9960, 40.7028], [-74.0060, 40.7028], [-74.0060, 40.7128]]] }',
	
	integer_field=123,
	ip_field='127.0.0.1',
	keyword_field='thhi is text',
	long_field=1234567890,
	
	--raw JSON must be in one line
	nested_field='[{"nested_property_1":"nested text 1", "nested_property_2":100}, {"nested_property_1":"nested text 2", "nested_property_2":101}]',
	
	--raw JSON must be in one line
	object_field='{"field1":"A","field2":"B"}', 
	--OR--
	--[object_field.field1]='object field keyword 1',
	--[object_field.field1]=123,
	
	short_field=1, 
	text_field='text field '
WHERE _id=2 --user defined key
--OR-- use auto-generated key
--WHERE _id='MtsicZQBuOa42vmvEtWJ' 
]]>
      </Code>
    </Example>
    <Example Group="ODBC" Label="Upsert (Update or Insert) documents using various data types (supply _id)" 
             Desc="This example shows how to update or insert document for different datatype fields. _id is optional. If _id column is supplied then it does UPSERT action (Update or Insert) if _id not supplied then does only insert (auto generate new _id) Some fields can accept value as Raw JSON (e.g. nested, object, geo_point, geo_shape). Object field type can also accept value by nested field (e.g. [object_field.field1] ). Look at the Result column in the output to see if document was created or updated.">
      <Code><![CDATA[
UPSERT INTO datatype_test (
    _id, 
	binary_field,
	boolean_field,
	byte_field,
	date_field,
	double_field,
	float_field,
	geo_point_field,  --raw
	--OR--
	--"geo_point_field.lat",
	--"geo_point_field.lon",
	
	geo_shape_field,  --raw
	--OR--
	--"geo_shape_field.type",
	--"geo_shape_field.coordinates",
	
	integer_field,
	ip_field,
	keyword_field,
	long_field,
	nested_field, --raw

	object_field, --raw
	--OR--
	--"object_field.field1",
	--"object_field.field2",
	
	short_field,
	text_field
)
VALUES(
    2, -- _id (Optional - if not supplied then it inserts with auto-generated _id)
	'SGVsbG8gd29ybGQ=', --binary_field  --base64 value of "Hello world"
	false, --bool
	117, --byte_field
	'2012-12-31T23:59:59.123', --date_field
	1.123456789, --double_field
	1.123456789, --float_field
	--raw JSON must be in one line
	'{ "lat": 40.7128, "lon": -74.0060 }', --geo_point_field
	--OR--
	-- 40.7128, -74.0060,
	
	'{ "type": "polygon", "coordinates": [[[-74.0060, 40.7128], [-73.9960, 40.7128], [-73.9960, 40.7028], [-74.0060, 40.7028], [-74.0060, 40.7128]]] }', --geo_shape_field
	--OR--
	--'polygon',
	--'[[[-74.0060, 40.7128], [-73.9960, 40.7128], [-73.9960, 40.7028], [-74.0060, 40.7028], [-74.0060, 40.7128]]]',
	
	123, --integer_field
	'127.0.0.1', --ip_field
	'thhi is text', --keyword_field
	1234567890, --long_field
	--raw JSON must be in one line
	'[{"nested_property_1":"nested text 1", "nested_property_2":100}, {"nested_property_1":"nested text 2", "nested_property_2":101}]', --nested_field
	'{"field1":"A","field2":"B"}', --object_field (Raw Value)
	--OR--
	--'object field keyword 1', --object_field.field1
	--123,                       --object_field.field2	
	1, --short_field
	'text field ' --text_field

) 
]]>
      </Code>
    </Example>	  


    <!-- INSERT RAW DOCUMENT-->
    <Example Group="ODBC" Label="Insert raw document (_rawdoc_ usage)" Desc="This example shows how to insert document(s) in a raw format. When you use column name _rawdoc_ then its treated as RAW body. Notice that we use @ before string literal in value. This allow to use escape sequence (in this case \n for new line)." >
      <Code>
        <![CDATA[INSERT INTO shop(_RAWDOC_) 
--raw JSON must be in one line		
VALUES(@'{"create":{"_index":"shop","_id":"1"}}\n{"name":"record-1","colors":["yellow","orange"]}\n{"create":{"_index":"shop","_id":"2"}}\n{"name":"record-2","colors":["red","blue"]}\n')]]>
      </Code>
    </Example>

    
    <!-- UPDATE DOCUMENTS IN INDEX -->
    <Example Group="ODBC" Label="Update documents in index" Desc="Updates documents in index">
       <Code>
          <![CDATA[UPDATE MyIndex
  SET Col1 = 'NewValue-1', Col2 = 'NewValue-2'
  WHERE _Id = 'A1234' ]]>
       </Code>
    </Example>
    
    <Example Group="ODBC" Label="Update raw document (_rawdoc_ usage)" Desc="This example shows how to update document(s) in a raw format. When you use column name _rawdoc_ then its treated as RAW body. Notice that we use @ before string literal in value. This allow to use escape sequence (in this case \n for new line)." >
      <Code>
        <![CDATA[UPDATE shop 
		--raw JSON must be in one line
		SET _rawdoc_ = @'{"update": {"_index": "shop", "_id": "1"}}\n{ "doc": {"colors":["yellow","orange"] } }\n{"update": {"_index": "shop", "_id": "2"}}\n{ "doc": {"colors":["yellow","blue"] } }\n']]>
      </Code>
    </Example>
    
    <!-- UPDATE DOCUMENTS IN INDEX -->
    <Example Group="ODBC" Label="Update array or sub document" Desc="This example shows how to update Array / nested Sub-document by adding raw:: prefix infront of column name to treat column as json fragment">
      <Code>
        <![CDATA[UPDATE MyIndex
  --raw JSON must be in one line		
  SET name = 'abcd', [raw::colors]='["yellow","red"]', [raw::location]='{x:10, y:20}' 
  WHERE _id='1' ]]>
      </Code>
    </Example>

    <!-- DELETE DOCUMENTS FROM INDEX -->
    <Example Group="ODBC" Label="Delete documents from index" Desc="Deletes documents from index">
       <Code>
          <![CDATA[DELETE MyIndex WHERE _id = 'A1234']]>
       </Code>
    </Example>
  </Examples>
</ApiConfig>