Reference
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 and write Elasticsearch data effortlessly. Integrate, manage, and automate indexes and documents — almost no coding required."
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="{ "from": {$$page_num$$}, "size": [$PagingIncrementBy$], "query": { "query_string": {"query": "[$Query$]"} } }"
IncludeParentColumns="True"
>
<Params>
<Param Name="Query" Label="Enter Query (JSON Format)"
Value="{"match_all": { } }"
HelpLink="https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html"
Options="All Records={"match_all": { } };Record where comment or name contains TV word={"query_string": {"query": "comment:TV OR name:TV"} };Record with comment field (attribute exists)={"query_string": {"query": "_exists_:comment"} }"
/>
<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=<<[$Alias$]|~|[$Index$]|~|$1,FUN_IF_NULL_OR_EMPTY>>/_search?scroll=[$CursorTimeout$]m|_search/scroll" />
<Param Name="FirstPageBodyPart" Type="Property" Value="{}" ValueTemplate="{ "size": [$PageSize$], "query": [$Query$] }" />
<Param Name="NextPageBodyPart" Type="Property" Value="{}" ValueTemplate="{ "scroll" : "[$CursorTimeout$]m", "scroll_id": "[$pagetoken$]" }" />
<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 existing 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&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&pretty" Method="GET" Filter="$..aliases"
CachedTtl="5"
>
<Params>
<Param Name="EnableCustomReplace" Type="Property" Value="True" />
<Param Name="SearchFor" Type="Property" Value=""(\w+(?<!aliases))"\s*:\s*\{\s*\}--regex" />
<Param Name="ReplaceWith" Type="Property" Value=""$1": {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="/<<[$Alias$]|~|[$Index$]|~|$1,FUN_IF_NULL_OR_EMPTY>>/_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="/<<[$Alias$]|~|[$Index$]|~|$1,FUN_IF_NULL_OR_EMPTY>>/_doc/[$Id$]" Method="GET" ContentType="application/json"
Filter=""
Body="{ "query": [$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="{ "query": [$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="{"match_all": { } }"
HelpLink="https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html"
Options="All Records={"match_all": { } };Record where comment or name contains TV word={"query_string": {"query": "comment:TV OR name:TV"} };Record with comment field (attribute exists)={"query_string": {"query": "_exists_:comment"} }"
/>
</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="{ "create" : { "_index": "[$Index$]" <<<%_id%>|~| |~|, "_id":"$1",FUN_IF_NULL_OR_EMPTY>> } }\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="{ "index" : { "_index": "[$Index$]" <<<%_id%>|~| |~|, "_id":"$1",FUN_IF_NULL_OR_EMPTY>> } }\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="{ "update" : { "_index": "[$Index$]" <<<%_id%>|~| |~|, "_id": "$1",FUN_IF_NULL_OR_EMPTY>> } }\n{ "doc": " 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" Slug="create-new-index" Label="Create a new index">
<Desc><![CDATA[
<p>Creates a new index (similar to creating a table). Supply the index name in the <code>WITH</code> clause. To have the call fail if the index already exists, set <code>ContineOnErrorForStatusCode=0</code>.</p>
]]></Desc>
<Code>
<![CDATA[SELECT * FROM create_index WITH(Name='my_new_index_name', ContineOnErrorForStatusCode=1)]]>
</Code>
</Example>
<Example Group="ODBC" Slug="delete-existing-index" Label="Delete an existing index">
<Desc><![CDATA[
<p>Deletes an existing index. Supply the index name in the <code>WITH</code> clause. Use <code>ContineOn404Error=1</code> to avoid errors when the index does not exist.</p>
]]></Desc>
<Code>
<![CDATA[SELECT * FROM delete_index WITH(Name='my_index_name', ContineOn404Error=1 )]]>
</Code>
</Example>
<Example Group="ODBC" Slug="generic-api-call" Label="Generic API call">
<Desc><![CDATA[
<p>Calls an Elasticsearch API when no dedicated endpoint is defined. Use <code>generic_request</code> with <code>Url</code>, <code>RequestMethod</code>, and optional <code>Body</code> or <code>Headers</code>. The example shows a CREATE INDEX-style PUT request.</p>
]]></Desc>
<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" Slug="list-indexes" Label="List indexes" Default="True">
<Desc><![CDATA[
<p>Returns all indexes (and their health, doc count, store size). Use to discover index names for queries or to inspect cluster state.</p>
]]></Desc>
<Code>
<![CDATA[SELECT * FROM Indexes]]>
</Code>
</Example>
<!-- GET INDEX METADATA -->
<Example Group="ODBC" Slug="get-index-metadata" Label="Get index metadata">
<Desc><![CDATA[
<p>Returns the mapping (schema) for an index or alias. Supply the index or alias name in the <code>WITH</code> clause.</p>
]]></Desc>
<Code>
<![CDATA[SELECT * FROM get_index_metadata WITH (Index='my_index_name')]]>
</Code>
</Example>
<!-- GET DOCUMENTS FROM INDEX -->
<Example Group="ODBC" Slug="read-documents-from-index" Label="Read documents from index (all or with filter)">
<Desc><![CDATA[
<p>Returns documents from an index (or alias) by using the index name as the table name. For server-side filtering use the <code>Query</code> parameter in the <code>WITH</code> clause; <code>WHERE</code> runs client-side and is slower.</p>
]]></Desc>
<Code>
<![CDATA[SELECT * FROM MyIndexOrAliasName --WITH(Query='{"match": { "PartNumber" : "P50" } }')]]>
</Code>
</Example>
<!-- GET DOCUMENTS FROM INDEX -->
<Example Group="ODBC" Slug="read-documents-from-alias" Label="Read documents from alias (all or with filter)">
<Desc><![CDATA[
<p>Returns documents from an alias. Use the alias name as the table name. For server-side filtering pass a query in the <code>WITH</code> clause.</p>
]]></Desc>
<Code>
<![CDATA[SELECT * FROM MyIndexOrAliasName --WITH(Query='{"match": { "PartNumber" : "P50" } }')]]>
</Code>
</Example>
<!-- Search DOCUMENTS from Index-->
<Example Group="ODBC" Slug="search-documents-from-index" Label="Search documents from index">
<Desc><![CDATA[
<p>Runs a full-text search on an index (or alias) using the Elasticsearch query DSL. Pass the query JSON in the <code>WITH</code> clause (e.g. <code>Query='{"match": { "comment" : "TV" } }'</code>). For more options see the Elasticsearch <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html">query DSL</a>.</p>
]]></Desc>
<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" Slug="search-documents-from-alias" Label="Search documents from alias">
<Desc><![CDATA[
<p>Runs a search on an alias (like a view over one or more indexes). Use the alias name in the <code>FROM</code> clause and pass the query in the <code>WITH</code> clause. For query syntax see the Elasticsearch query DSL documentation.</p>
]]></Desc>
<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" Slug="count-documents-in-indexes" Label="Count documents in indexes">
<Desc><![CDATA[
<p>Counts documents across one or more indexes or aliases using the Elasticsearch query DSL. Use the <code>Index</code> parameter to target a single index or alias, multiple indexes/aliases, or all indexes (with <code>*</code>). Optionally supply a query expression to count only matching documents; see the Elasticsearch query DSL documentation for query syntax.</p>
]]></Desc>
<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" Slug="count-documents-in-aliases" Label="Count documents in aliases">
<Desc><![CDATA[
<p>Counts documents across one or more aliases (and, if needed, a mix of indexes and aliases) using the Elasticsearch query DSL. Use the <code>Index</code> parameter to list the aliases and indexes to include, and optionally pass a query expression to count only matching documents; see the Elasticsearch query DSL documentation for details.</p>
]]></Desc>
<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" Slug="using-json-array-value-functions" 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" Slug="insert-documents-into-index-autogenerated-id" 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" Slug="insert-documents-into-index-custom-id" 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" Slug="insert-documents-using-nested-attribute" Label="Insert documents using nested attribute and raw fragments (JSON sub-documents, arrays)"
Desc="This example produces JSON document like this {"_id": "some_auto_generated_id" , "Location": { "City" : "Atlanta" , "ZipCode" : "30060" },"ColorsArray ": ["Red", "Blue", "Green"],"SomeNestedDoc": { "Col1" : "aaa" , "Col2" : "bbb" , "Col2" : "ccc" }} . 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" Slug="insert-documents-using-various-data-types" 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" Slug="update-documents-using-various-data-types" 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" Slug="upsert-documents-using-various-data-types" 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" Slug="insert-raw-document-rawdoc-usage" 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" Slug="update-documents-in-index" 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" Slug="update-raw-document-rawdoc-usage" 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" Slug="update-array-or-sub-document" 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" Slug="delete-documents-from-index" Label="Delete documents from index" Desc="Deletes documents from index">
<Code>
<![CDATA[DELETE MyIndex WHERE _id = 'A1234']]>
</Code>
</Example>
</Examples>
</ApiConfig>