{"id":15792,"date":"2019-07-22T13:34:35","date_gmt":"2019-07-22T20:34:35","guid":{"rendered":"https:\/\/devwww.3cloudsolutions.com\/post\/knowledge-mining-showcase-using-apis-to-manage-azure-search-3\/"},"modified":"2024-01-08T15:17:36","modified_gmt":"2024-01-08T23:17:36","slug":"knowledge-mining-showcase-using-apis-to-manage-azure-search","status":"publish","type":"post","link":"https:\/\/3cloudsolutions.com\/resources\/knowledge-mining-showcase-using-apis-to-manage-azure-search\/","title":{"rendered":"Knowledge Mining Showcase: Using APIs to Manage Azure Search"},"content":{"rendered":"<p>In this installment of 3Cloud&#8217;s Knowledge Mining Showcase, we are going to learn how to create an Azure Search Service and perform searches using application programming interfaces (APIs).<\/p>\n<p>Even though the Azure Portal gives us a reasonable user interface to create and manage our searches, APIs give us more flexibility and can be saved and rerun many times.<\/p>\n<p>Moving forward in the Knowledge Mining Showcase, we will primarily be using APIs, rather than the Azure Portal user interface.<\/p>\n<p><!--more--><\/p>\n<p><img decoding=\"async\" style=\"width: 841px;\" src=\"https:\/\/cdn2.hubspot.net\/hubfs\/257922\/knowledge%20mining.svg\" alt=\"knowledge mining\" width=\"841\" \/><\/p>\n<p>Before we begin, you will need a few things,<\/p>\n<ol>\n<li>An API development environment. I use Postman, which you can get <a href=\"https:\/\/www.getpostman.com\/\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/li>\n<li>A familiarity with RESTful APIs and how to use them. If you are new to APIs, you can get a good start and learn about the different API methods <a href=\"https:\/\/www.restapitutorial.com\/lessons\/httpmethods.html\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/li>\n<li>A familiarity with <a href=\"https:\/\/azure.microsoft.com\/en-us\/services\/search\/\" target=\"_blank\" rel=\"noopener\">Azure Search<\/a> and an understanding of how to create an Azure storage account, and an Azure Search Service. Both of these are covered extensively in the <a href=\"\/blog\/knowledge-mining-showcase-azure-search\" target=\"_blank\" rel=\"noopener\">Azure Search post<\/a> of the Knowledge Mining Showcase.<\/li>\n<li>A storage account with data to index and search.<\/li>\n<\/ol>\n<h2>Getting Started<\/h2>\n<p>Details on creating an Azure storage account with blob containers are provided in the <a href=\"\/blog\/knowledge-mining-showcase-azure-search\" target=\"_blank\" rel=\"noopener\">Azure Search post<\/a> of the Knowledge Mining Showcase. We will be working with a common dataset used in Microsoft\u2019s Knowledge Mining Bootcamp, which is also an excellent introduction to Azure Search. You can go to the Bootcamp. To get the dataset, go to the GitHub repository at <a href=\"https:\/\/github.com\/Azure\/LearnAI-KnowledgeMiningBootcamp.git\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/Azure\/LearnAI-KnowledgeMiningBootcamp.git<\/a> and clone the repository. You\u2019ll find the sample data in the <strong>resources\/dataset\/<\/strong> folder.<\/p>\n<p><img decoding=\"async\" style=\"width: 3065px;\" src=\"https:\/\/cdn2.hubspot.net\/hubfs\/257922\/Knowledge%20Mining%20Azure1.png\" alt=\"Knowledge Mining Azure1\" width=\"3065\" \/><\/p>\n<p>Upload this data into your blob container if you wish to follow along and get the same results that I get. It\u2019s fine to use your own data if you prefer. Try to use a combination of PDF, Word, Excel, HTML, and graphic files.<\/p>\n<p>Once you have your data loaded, you will need to create a Search Service. Again, details on how to do this can be found in the <a href=\"\/blog\/knowledge-mining-showcase-azure-search\" target=\"_blank\" rel=\"noopener\">Azure Search post<\/a> of the Knowledge Mining Showcase.<\/p>\n<p>Have your blob container loaded with data and your Search Service created? Let\u2019s move forward.<\/p>\n<h2>Creating a Dataset<\/h2>\n<p>We need to give a link to our data to the Search Service. We do this by creating a data source in the Search Service. The format for the API call to create a data source is:<\/p>\n<p><strong>POST<\/strong> https:\/\/<span style=\"color: #ff9902;\">[Search_Service_Name]<\/span>.search.windows.net\/datasources?api-version=<span style=\"color: #ff9902;\">[api-version]<\/span><\/p>\n<p>Where <span style=\"color: #ff9902;\">[Search_Service_Name]<\/span> is the name of your Search Service and <span style=\"color: #ff9902;\">[api-version]<\/span> is the version of the API you are using. \u201c2019-05-06\u201d is the most current production version as the writing of this post.<\/p>\n<p>I\u2019ve created a Search Service named \u2018<strong>bgblogsearchservice<\/strong>\u2019, so my call would be:<\/p>\n<p>POST https:\/\/bgblogsearchservice.search.windows.net\/datasources?api-version=2019-05-06<\/p>\n<p>But we\u2019ve got to add information about the blob container we are using for our data source. We do that in the body of the POST call. The body for my call looks like this:<\/p>\n<p><img decoding=\"async\" style=\"width: 666px;\" src=\"https:\/\/cdn2.hubspot.net\/hubfs\/257922\/code%201%20knowledge%20mining.png\" alt=\"code 1 knowledge mining\" width=\"666\" \/><\/p>\n<p>Where:<br \/>\n<strong>name <\/strong>\u2013 The name of your new data source<br \/>\n<strong>description<\/strong> \u2013 A description of your data source<br \/>\n<strong>type<\/strong> \u2013 Can be one of \u00a0the following: azureblob, azuretable, azuresql, or documentdb<br \/>\n<strong>credentials<\/strong> \u2013 Contains the connection string to your storage account<br \/>\n<strong>container <\/strong>\u2013 The name of the container where your blobs are stored<\/p>\n<p>You can get the connection string to your storage account by opening up your storage account, selecting <strong>Access Keys<\/strong> under <strong>Settings<\/strong> and then copying the <strong>key1 Connection string<\/strong>.<\/p>\n<p><img decoding=\"async\" style=\"width: 3767px;\" src=\"https:\/\/cdn2.hubspot.net\/hubfs\/257922\/Knowledge%20Mining%20Azure%202.png\" alt=\"Knowledge Mining Azure 2\" width=\"3767\" \/><\/p>\n<p>One last thing \u2013 to complete our Create Data source API call, we\u2019ve got to add the headers to our call. We need to add the <strong>Content-Type<\/strong> and the <strong>api-key<\/strong>.<\/p>\n<p><img decoding=\"async\" style=\"width: 3836px;\" src=\"https:\/\/cdn2.hubspot.net\/hubfs\/257922\/Knowledge%20Mining%20Azure%203.png\" alt=\"Knowledge Mining Azure 3\" width=\"3836\" \/><\/p>\n<p>You can get the API Key from your Search Service. Select your <strong>Search Service<\/strong> and then select <strong>Keys<\/strong> under <strong>Settings<\/strong> and copy the <strong>Primary admin key<\/strong>.<\/p>\n<p><img decoding=\"async\" style=\"width: 3136px;\" src=\"https:\/\/cdn2.hubspot.net\/hubfs\/257922\/Knowledge%20Mining%20Azure%204.png\" alt=\"Knowledge Mining Azure 4\" width=\"3136\" \/><\/p>\n<p>Once you copy the <strong>Search Service key<\/strong> into the header of your API call, you should be all set. Here\u2019s what my call looks like in Postman:<\/p>\n<p><img decoding=\"async\" style=\"width: 2896px;\" src=\"https:\/\/cdn2.hubspot.net\/hubfs\/257922\/Knowledge%20Mining%20Azure%205-1.png\" alt=\"Knowledge Mining Azure 5-1\" width=\"2896\" \/><\/p>\n<p>Just hit <strong>Send <\/strong>and you should see a result something like this:<\/p>\n<p><img decoding=\"async\" style=\"width: 2865px;\" src=\"https:\/\/cdn2.hubspot.net\/hubfs\/257922\/Knowledge%20Mining%20Azure%206.png\" alt=\"Knowledge Mining Azure 6\" width=\"2865\" \/><\/p>\n<p>If you don\u2019t trust the API response, you can go to your Search Service in the Azure Portal and verify that that data source has been created.<\/p>\n<p><img decoding=\"async\" style=\"width: 3034px;\" src=\"https:\/\/cdn2.hubspot.net\/hubfs\/257922\/Knowledge%20Mining%20Azure%207.png\" alt=\"Knowledge Mining Azure 7\" width=\"3034\" \/><\/p>\n<p>In case you ever need it, you can delete your data source via an API call using the following format:<\/p>\n<p><strong>DELETE<\/strong> https:\/\/<span style=\"color: #ff9902;\">[Search_Service_Name]<\/span>.search.windows.net\/datasources\/<span style=\"color: #ff9902;\">[Data_Source_Name]<\/span>?api-version=<span style=\"color: #ff9902;\">[api-version]<\/span><\/p>\n<h2>Creating an Index<\/h2>\n<p>Think of the <strong>Index<\/strong> as the definition of the data in our data source; how it will be searched, and how results will be returned. The format for the API call to create an Index is:<\/p>\n<p><strong>POST<\/strong> https:\/\/<span style=\"color: #ff9902;\">[Search_Service_Name]<\/span>.search.windows.net\/indexes?api-version=<span style=\"color: #ff9902;\">[api-version]<\/span><\/p>\n<p>Where <span style=\"color: #ff9902;\">[Search_Service_Name]<\/span> is the name of your Search Service, <span style=\"color: #ff9902;\">[Index_Name]<\/span> is the name of your Index, and <span style=\"color: #ff9902;\">[api-version]<\/span> is the version of the API you are using. \u201c2019-05-06\u201d is the most current production version as the writing of this post.<\/p>\n<p>Using my Search Service named \u2018<strong>bgblogsearchservice<\/strong>\u2019 and an Index named \u2018<strong>bgblogindex<\/strong>\u2019, my call would be:<\/p>\n<p><strong>POST<\/strong> https:\/\/bgblogsearchservice.search.windows.net\/indexes?api-version=2019-05-06<\/p>\n<p>Note that you can update an existing Index by using the following PUT format. PUT will create the given Index if it does not already exist:<\/p>\n<p><strong>PUT<\/strong> https:\/\/<span style=\"color: #ff9902;\">[Search_Service_Name]<\/span>.search.windows.net\/indexes\/<span style=\"color: #ff9902;\">[Index_Name]<\/span>?api-version=<span style=\"color: #ff9902;\">[api-version]<\/span><\/p>\n<p>The body for our Index POST is a bit longer than that of the Data source POST, but it\u2019s not too bad. We need to name our Index and define each field that will be in our Index. The format of each field definition will be:<\/p>\n<p><img decoding=\"async\" style=\"width: 596px;\" src=\"https:\/\/cdn2.hubspot.net\/hubfs\/257922\/knowledge%20mining%20code%202.png\" alt=\"knowledge mining code 2\" width=\"596\" \/><\/p>\n<p>This is an example subset of commonly used field definitions; there are many more. For a full reference of available Index field definitions, see <a href=\"https:\/\/docs.microsoft.com\/en-us\/rest\/api\/searchservice\/create-index\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/p>\n<p>A pretty simple and standard definition of an Index may look like this:<\/p>\n<p><img decoding=\"async\" style=\"width: 398px;\" src=\"https:\/\/cdn2.hubspot.net\/hubfs\/257922\/code%20km-1.png\" alt=\"code km-1\" width=\"398\" \/><\/p>\n<p>We can use the above JSON as our <strong>Create Index POST<\/strong>. Don\u2019t forget to add the Headers with the <strong>Content-Type<\/strong> and the <strong>api-key<\/strong> values.<\/p>\n<p>Here\u2019s what mine looks like in Postman:<\/p>\n<p><img decoding=\"async\" style=\"width: 2853px;\" src=\"https:\/\/cdn2.hubspot.net\/hubfs\/257922\/Knowledge%20Mining%20Azure%208.png\" alt=\"Knowledge Mining Azure 8\" width=\"2853\" \/><\/p>\n<p>Hit the <strong>Send<\/strong> button and you should get a result like this:<\/p>\n<p><img decoding=\"async\" style=\"width: 2898px;\" src=\"https:\/\/cdn2.hubspot.net\/hubfs\/257922\/Knowledge%20Mining%20Azure%209.png\" alt=\"Knowledge Mining Azure 9\" width=\"2898\" \/><\/p>\n<p>We know that with this response, the Index was created, but we can verify that by going to our Search Service on the Azure Portal and finding the Index:<\/p>\n<p><img decoding=\"async\" style=\"width: 3045px;\" src=\"https:\/\/cdn2.hubspot.net\/hubfs\/257922\/Knowledge%20Mining%20Azure%2010.png\" alt=\"Knowledge Mining Azure 10\" width=\"3045\" \/><\/p>\n<p>In case you ever need it, you can delete your Index via an API call using the following format:<\/p>\n<p><strong>DELETE<\/strong> https:\/\/<span style=\"color: #ff9902;\">[Search_Service_Name]<\/span>.search.windows.net\/indexes\/<span style=\"color: #ff9902;\">[Index_Name]<\/span>?api-version=<span style=\"color: #ff9902;\">[api-version]<\/span><\/p>\n<h2>Creating an Indexer<\/h2>\n<p>The Indexer is utility that moves the raw data from your data source into your Index. The format for the API call to create an Indexer is:<\/p>\n<p><strong>POST<\/strong> https:\/\/<span style=\"color: #ff9902;\">[Search_Service_Name]<\/span>.search.windows.net\/indexers?api-version=<span style=\"color: #ff9902;\">[api-version]<\/span><\/p>\n<p>Where <span style=\"color: #ff9902;\">[Search_Service_Name]<\/span> is the name of your Search Service and <span style=\"color: #ff9902;\">[api-version]<\/span> is the version of the API you are using. \u201c2019-05-06\u201d is the most current production version as the writing of this post.<\/p>\n<p>Using my Search Service named \u2018<strong>bgblogsearchservice<\/strong>\u2019 and an Indexer named \u2018<strong>bgblogindexer<\/strong>\u2019, my call would be:<\/p>\n<p><strong>POST<\/strong> https:\/\/bgblogsearchservice.search.windows.net\/indexers?api-version=2019-05-06<\/p>\n<p>Note that you can update an existing Indexer by using the following PUT format:<\/p>\n<p><strong>PUT<\/strong> https:\/\/<span style=\"color: #ff9902;\">[Search_Service_Name]<\/span>.search.windows.net\/indexers\/<span style=\"color: #ff9902;\">[Indexer_Name]<\/span>?api-version=<span style=\"color: #ff9902;\">[api-version]<\/span><\/p>\n<p>The body for our Indexer POST is basically a mapping from our raw data to the Index. We only need to do this if we want the name of the field in the Index to be different than the raw data. We\u2019ll also need to use the Indexer to perform mapping functions.<\/p>\n<p>Here is a basic Indexer body for our example:<\/p>\n<p><img decoding=\"async\" style=\"width: 344px;\" src=\"https:\/\/cdn2.hubspot.net\/hubfs\/257922\/knowledge%20mining%20code%205.png\" alt=\"knowledge mining code 5\" width=\"344\" \/><\/p>\n<p>We need to name our Indexer (\u201c<strong>name<\/strong>\u201d) and then identify our Data source (\u201c<strong>dataSourceName<\/strong>\u201d) and our Index (\u201c<strong>targetIndexName<\/strong>\u201d). The rest is field mapping.<\/p>\n<p>Remember in our Index definition we had a field named \u201c<strong>metadata_storage_path<\/strong>\u201d? This is a metadata field that Search gives us automatically. Common practice is to make this the unique identifier in our index, as it is guaranteed to be unique. Since \u201c<strong>metadata_storage_path<\/strong>\u201d is an odd name for an ID field, let\u2019s rename it to \u201c<strong>id<\/strong>\u201d. We do this with the field mapping above. We also want to encode it into a number rather than a text field. We do that with the \u201c<strong>mappingFunction<\/strong>\u201d section and the \u201c<strong>base64code<\/strong>\u201d encoding function provided to us by Search.<\/p>\n<p>Let\u2019s go back to our Index definition:<\/p>\n<p><img decoding=\"async\" style=\"width: 617px;\" src=\"https:\/\/cdn2.hubspot.net\/hubfs\/257922\/knowledge%20mining%20code%206.png\" alt=\"knowledge mining code 6\" width=\"617\" \/><\/p>\n<p>Since we\u2019re mapping the \u201c<strong>metadata_storage_path<\/strong>\u201d field to \u201c<strong>id<\/strong>\u201d with our Indexer, we need to update our Index, or we will get an error that the \u201c<strong>id<\/strong>\u201d field does not exist on the target Index when we run our Indexer.<\/p>\n<p>We must <strong>DELETE<\/strong> our existing Index and then recreate it with a <strong>POST <\/strong>call. You cannot change field names on an existing Index with a PUT call. Using the Index created earlier, we make the following API call to delete it:<\/p>\n<p><strong>DELETE<\/strong> https:\/\/bgblogsearchservice.search.windows.net\/indexes\/bgblogindex?api-version=2019-05-06<\/p>\n<p>We can then make the same <strong>POST <\/strong>call we made earlier to create the Index, but replace the name \u201c<strong>metadata_storage_path<\/strong>\u201d with \u201c<strong>id<\/strong>\u201d in the body of the call. This is what my call looks like in Postman:<\/p>\n<p><img decoding=\"async\" style=\"width: 2904px;\" src=\"https:\/\/cdn2.hubspot.net\/hubfs\/257922\/Knowledge%20Mining%20Azure%2011.png\" alt=\"Knowledge Mining Azure 11\" width=\"2904\" \/><\/p>\n<p>Now we are set to run our Indexer using the mapping we defined earlier. Don\u2019t forget to add the <strong>api-key <\/strong>and the <strong>Content-Type<\/strong> to the header. This is what my call looked like in Postman:<\/p>\n<p><img decoding=\"async\" style=\"width: 2874px;\" src=\"https:\/\/cdn2.hubspot.net\/hubfs\/257922\/Knowledge%20Mining%20Azure%2012.png\" alt=\"Knowledge Mining Azure 12\" width=\"2874\" \/><\/p>\n<p>Not only does the <strong>create Indexer call<\/strong> create the Indexer, it also runs it. This can take some time. You can check the status of the Indexer from the <strong>Azure Portal Search Service Overview<\/strong> page, or you can make the following API Call:<\/p>\n<p><strong>GET<\/strong> https:\/\/<span style=\"color: #ff9902;\">[Search_Service_Name]<\/span>.search.windows.net\/indexers\/<span style=\"color: #ff9902;\">[Indexer_Name]<\/span>\/status?api-version=<span style=\"color: #ff9902;\">[api-version]<\/span><\/p>\n<p><img decoding=\"async\" style=\"width: 2885px;\" src=\"https:\/\/cdn2.hubspot.net\/hubfs\/257922\/Knowledge%20Mining%20Azure%2013.png\" alt=\"Knowledge Mining Azure 13\" width=\"2885\" \/><\/p>\n<p>Once the \u201c<strong>status<\/strong>\u201d comes back as \u201c<strong>success<\/strong>\u201d, your Indexer has finished.<\/p>\n<h2>Performing A Search<\/h2>\n<p>We now have our Index populated with the data from our data source using the rules we defined in our Indexer.<\/p>\n<p>The Index is now ready to Search!<\/p>\n<p>The format of our API call to perform a search is:<\/p>\n<p><strong>GET<\/strong> https:\/\/<span style=\"color: #ff9902;\">[Search_Service_Name]<\/span>.search.windows.net\/indexes\/<span style=\"color: #ff9902;\">[Index_Name]<\/span>\/docs?[query paramaters]?api-version=<span style=\"color: #ff9902;\">[api-version]<\/span><\/p>\n<p>There are a lot of potential <strong>[query parameters] <\/strong>we can use for our search. You can find a full list <a href=\"https:\/\/docs.microsoft.com\/en-us\/rest\/api\/searchservice\/search-documents\" rel=\" noopener\">here<\/a>. For this exercise we\u2019re only going to use a few:<\/p>\n<p><strong>search<\/strong>=[string]<\/p>\n<p><strong>$count<\/strong>=[true|false]<\/p>\n<p>\u201c<strong>search<\/strong>\u201d is the term that we will be searching for and \u201c<strong>$count=true<\/strong>\u201d will give us back the count of the records found with our search term. If we use this API call:<\/p>\n<p>https:\/\/<span style=\"color: #ff9902;\">[Search_Service_Name]<\/span>.search.windows.net\/indexes\/bgblogindex\/docs?search=microsoft&amp;$count=true&amp;api-version=2019-05-06<\/p>\n<p>If you used the files from the Knowledge Mining Bootcamp, you should return 10 records back from your Search and it should look something like this:<\/p>\n<p><img decoding=\"async\" style=\"width: 2889px;\" src=\"https:\/\/cdn2.hubspot.net\/hubfs\/257922\/Knowledge%20Mining%20Azure%2014.png\" alt=\"Knowledge Mining Azure 14\" width=\"2889\" \/><\/p>\n<p>Congratulations! You\u2019ve now created a data source, index, and indexer, as well as performed an Azure Search, all using APIs.<\/p>\n<h2>More to Come<\/h2>\n<p>In the coming weeks I\u2019ll be exploring the many ways to use Azure Cognitive Search to more easily unearth knowledge from once-difficult-to-mine data sources. Be sure to\u00a0subscribe to our blog\u00a0so that you don&#8217;t miss a tutorial, or <a href=\"https:\/\/www.blue-granite.com\/contact-us\">contact us<\/a> today to discover the many ways 3Cloud can make the most of your data!<\/p>\n<h2>Reference and Resources<\/h2>\n<p><a href=\"https:\/\/docs.microsoft.com\/en-us\/rest\/api\/searchservice\/indexer-operations\">Indexer Overview<\/a><\/p>\n<p>API Call Reference<\/p>\n<p style=\"padding-left: 40px;\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/rest\/api\/searchservice\/create-data-source\" target=\"_blank\" rel=\"noopener\">Create a Data Source<\/a><\/p>\n<p style=\"padding-left: 40px;\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/rest\/api\/searchservice\/delete-data-source\" target=\"_blank\" rel=\"noopener\">Delete a Data Source<\/a><\/p>\n<p style=\"padding-left: 40px;\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/rest\/api\/searchservice\/create-index\" target=\"_blank\" rel=\"noopener\">Create an Index<\/a><\/p>\n<p style=\"padding-left: 40px;\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/rest\/api\/searchservice\/delete-index\" target=\"_blank\" rel=\"noopener\">Delete an Index<\/a><\/p>\n<p style=\"padding-left: 40px;\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/rest\/api\/searchservice\/create-indexer\" target=\"_blank\" rel=\"noopener\">Create an Indexer<\/a><\/p>\n<p style=\"padding-left: 40px;\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/rest\/api\/searchservice\/delete-indexer\" target=\"_blank\" rel=\"noopener\">Delete an Indexer<\/a><\/p>\n<p style=\"padding-left: 40px;\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/rest\/api\/searchservice\/run-indexer\" target=\"_blank\" rel=\"noopener\">Run an Indexer<\/a><\/p>\n<p style=\"padding-left: 40px;\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/rest\/api\/searchservice\/reset-indexer\" target=\"_blank\" rel=\"noopener\">Reset an Indexer<\/a><\/p>\n<p style=\"padding-left: 40px;\"><a href=\"https:\/\/docs.microsoft.com\/en-us\/rest\/api\/searchservice\/search-documents\" target=\"_blank\" rel=\"noopener\">Perform a Search<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this installment of 3Cloud\\&#8217;s Knowledge Mining Showcase, we are going to learn how to create an Azure Search Service and perform searches using application programming interfaces (APIs).<\/p>\n","protected":false},"author":21,"featured_media":13308,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[260],"tags":[330],"class_list":["post-15792","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-ai","tag-knowledge-mining","topics-blog"],"acf":[],"_links":{"self":[{"href":"https:\/\/3cloudsolutions.com\/wp-json\/wp\/v2\/posts\/15792","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/3cloudsolutions.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/3cloudsolutions.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/3cloudsolutions.com\/wp-json\/wp\/v2\/users\/21"}],"replies":[{"embeddable":true,"href":"https:\/\/3cloudsolutions.com\/wp-json\/wp\/v2\/comments?post=15792"}],"version-history":[{"count":0,"href":"https:\/\/3cloudsolutions.com\/wp-json\/wp\/v2\/posts\/15792\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/3cloudsolutions.com\/wp-json\/wp\/v2\/media\/13308"}],"wp:attachment":[{"href":"https:\/\/3cloudsolutions.com\/wp-json\/wp\/v2\/media?parent=15792"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/3cloudsolutions.com\/wp-json\/wp\/v2\/categories?post=15792"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/3cloudsolutions.com\/wp-json\/wp\/v2\/tags?post=15792"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}