{"id":1405,"date":"2015-03-13T09:05:47","date_gmt":"2015-03-13T09:05:47","guid":{"rendered":"http:\/\/blog.stratio.com\/?p=72"},"modified":"2023-09-20T13:46:09","modified_gmt":"2023-09-20T13:46:09","slug":"top-k-queries-in-cassandra-an-embedded-mapreduce-approach","status":"publish","type":"post","link":"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/","title":{"rendered":"Top-k queries in Cassandra: An embedded mapreduce approach"},"content":{"rendered":"<p style=\"text-align: justify;\">Stratio has just added top-k queries support to its Lucene based implementation of the Cassandra\u2019s secondary indexes. This implementation was originally designed to allow embedded full-text and multivariable search in Apache Cassandra. The previous release included an ad-hoc mechanism to perform distributed relevance queries based on the Lucene\u2019s scoring algorithm. The current release generalizes this mechanism to allow several types of top-k queries.<!--more--><\/p>\n<h2 style=\"text-align: justify;\">What is a Top-k query?<\/h2>\n<p style=\"text-align: justify;\">Top-k queries are those that get the k best results for a query according to some user-defined criteria, assigning a score to each result. Examples of use can be to retrieve the k last tweets of a given user, the k best scores of a gaming leaderboard or the k most relevant news in a newspaper for a given full-text search.<\/p>\n<p style=\"text-align: justify;\">Lucene provides top-k queries out of the box. It uses its index structure to avoid full data scan. However its usage is limited to a single machine, so the challenge here was to make it work in the distributed environment of Cassandra. In the Cassandra\u2019s standard secondary indexes implementation the coordinator node iterates sequentially over all the nodes in the cluster collecting the locally indexed data until the number of requested results is satisfied. It can be seen somehow as a sequential mapreduce algorithm where the map phase is querying locally indexed data and the reduce phase is just adding collected data. Nodes are travelled sequentially because it allows us to stop the iteration when enough results have been collected.<\/p>\n<p style=\"text-align: justify;\"><a href=\"http:\/\/blog.stratio.com\/wp-content\/uploads\/2015\/03\/Cassandra_1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-1170\" src=\"http:\/\/blog.stratio.com\/wp-content\/uploads\/2015\/03\/Cassandra_1-1024x836.png\" alt=\"Cassandra_1\" width=\"640\" height=\"523\" srcset=\"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/03\/Cassandra_1-1024x836.png 1024w, https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/03\/Cassandra_1-300x245.png 300w, https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/03\/Cassandra_1-768x627.png 768w, https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/03\/Cassandra_1.png 1044w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">However, top-k queries -and many other- must visit all the nodes in the cluster because the most relevant results can be in any of these. This collect process can be done in parallel to reduce latency. Also, the partial node results must be combined with a specific logic in the coordinator node, not just collected. We have modified the secondary indexes query mechanism to provide a more general, reusable, optionally parallel, mapreduce system. So, our Lucene-based top-k queries are just a particular use case of its abstract mechanism.<\/p>\n<h2>How to perform Top-k queries<\/h2>\n<p style=\"text-align: justify;\">First, we have added a customizable\u00a0<a href=\"https:\/\/github.com\/Stratio\/stratio-cassandra\/blob\/stratio-cassandra-2.0.81\/src\/java\/org\/apache\/cassandra\/db\/index\/SecondaryIndexSearcher.java#L121\">combine(command, rows)<\/a>\u00a0method to the secondary index interface which is called by the coordinator to properly merge the partial results according to a custom logic defined in the concrete index implementation. Second, we have added to the 2i interface a\u00a0<a href=\"https:\/\/github.com\/Stratio\/stratio-cassandra\/blob\/stratio-cassandra-2.0.81\/src\/java\/org\/apache\/cassandra\/db\/index\/SecondaryIndexSearcher.java#L106\">requiresFullScan(command)<\/a>\u00a0method to specify when a full parallel cluster scan must be performed. Top-k queries needs this full-scan because the most relevant results can be in any node in the cluster whereas the embedded 2i approach does not need to traverse all the nodes. Finally, we have modified the Cassandra\u2019s\u00a0<a href=\"https:\/\/github.com\/Stratio\/stratio-cassandra\/blob\/stratio-cassandra-2.0.81\/src\/java\/org\/apache\/cassandra\/service\/StorageProxy.java#L1569\">storage proxy<\/a>\u00a0to parallelize the node querying when full cluster scan is required. Thus, we get not only a way to perform top-k queries over our index, but we have a general way to run simple mapreduce algorithms inside Cassandra.<\/p>\n<p>As an example, we can perform relevance queries such as retrieving the 100 most relevant tweets containing the phrase \u201cbig data\u201d:<\/p>\n<pre class=\"prettyprint lang-meta\">SELECT * FROM tweets WHERE lucene=\n'{query:{type:\"phrase\", field:\"message\", values:[\"big\", \"data\"]}}' limit 100;<\/pre>\n<p>And we can retrieve the 20 most recent tweets containing the phrase \u201cbig data\u201d:<\/p>\n<pre class=\"prettyprint lang-meta\">SELECT * FROM tweets WHERE lucene=\n'{filter:{type:\"phrase\", field:\"message\", values:[\"big\", \"data\"]},\n  sort:{fields:[{field:\"createdat\"}]}}' limit 20;<\/pre>\n<p>The modified version of Apache Cassandra with the Lucene-based secondary indexes is publically available in\u00a0<a title=\"GitHub\" href=\"https:\/\/github.com\/Stratio\/stratio-cassandra\">GitHub<\/a>\u00a0under the\u00a0<a title=\"Apache License, v2\" href=\"http:\/\/www.apache.org\/licenses\/LICENSE-2.0.html\">Apache License, v2<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Stratio has just added top-k queries support to its Lucene based implementation of the Cassandra\u2019s secondary indexes. This implementation was originally designed to allow embedded full-text and multivariable search in Apache Cassandra. <\/p>\n","protected":false},"author":1,"featured_media":116,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[686],"tags":[85],"ppma_author":[795],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.9 (Yoast SEO v22.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Top-k queries in Cassandra: An embedded mapreduce approach - Stratio<\/title>\n<meta name=\"description\" content=\"Stratio has just added top-k queries support to its Lucene based implementation of the Cassandra\u2019s secondary indexes.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Top-k queries in Cassandra: An embedded mapreduce approach\" \/>\n<meta property=\"og:description\" content=\"Stratio has just added top-k queries support to its Lucene based implementation of the Cassandra\u2019s secondary indexes.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/\" \/>\n<meta property=\"og:site_name\" content=\"Stratio\" \/>\n<meta property=\"article:published_time\" content=\"2015-03-13T09:05:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-20T13:46:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/03\/Cassandra.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"730\" \/>\n\t<meta property=\"og:image:height\" content=\"312\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Stratio\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@stratiobd\" \/>\n<meta name=\"twitter:site\" content=\"@stratiobd\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Stratio\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/\"},\"author\":{\"name\":\"Stratio\",\"@id\":\"https:\/\/www.stratio.com\/blog\/#\/schema\/person\/d0377b199cd052b17e15c9ba44c45ab7\"},\"headline\":\"Top-k queries in Cassandra: An embedded mapreduce approach\",\"datePublished\":\"2015-03-13T09:05:47+00:00\",\"dateModified\":\"2023-09-20T13:46:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/\"},\"wordCount\":546,\"publisher\":{\"@id\":\"https:\/\/www.stratio.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/03\/Cassandra.jpg\",\"keywords\":[\"spark\"],\"articleSection\":[\"Product\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/\",\"url\":\"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/\",\"name\":\"Top-k queries in Cassandra: An embedded mapreduce approach - Stratio\",\"isPartOf\":{\"@id\":\"https:\/\/www.stratio.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/03\/Cassandra.jpg\",\"datePublished\":\"2015-03-13T09:05:47+00:00\",\"dateModified\":\"2023-09-20T13:46:09+00:00\",\"description\":\"Stratio has just added top-k queries support to its Lucene based implementation of the Cassandra\u2019s secondary indexes.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/#primaryimage\",\"url\":\"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/03\/Cassandra.jpg\",\"contentUrl\":\"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/03\/Cassandra.jpg\",\"width\":730,\"height\":312},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.stratio.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Top-k queries in Cassandra: An embedded mapreduce approach\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.stratio.com\/blog\/#website\",\"url\":\"https:\/\/www.stratio.com\/blog\/\",\"name\":\"Stratio Blog\",\"description\":\"Corporate blog\",\"publisher\":{\"@id\":\"https:\/\/www.stratio.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.stratio.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.stratio.com\/blog\/#organization\",\"name\":\"Stratio\",\"url\":\"https:\/\/www.stratio.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.stratio.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/stratio.com\/blog\/wp-content\/uploads\/2020\/06\/stratio-web-logo-1.png\",\"contentUrl\":\"https:\/\/stratio.com\/blog\/wp-content\/uploads\/2020\/06\/stratio-web-logo-1.png\",\"width\":260,\"height\":55,\"caption\":\"Stratio\"},\"image\":{\"@id\":\"https:\/\/www.stratio.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/stratiobd\",\"https:\/\/es.linkedin.com\/company\/stratiobd\",\"https:\/\/www.youtube.com\/c\/StratioBD\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.stratio.com\/blog\/#\/schema\/person\/d0377b199cd052b17e15c9ba44c45ab7\",\"name\":\"Stratio\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.stratio.com\/blog\/#\/schema\/person\/image\/bb38888f58c2bb664646155f78ae6ccc\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e3387ad00609f34a56d6796400eb8191?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e3387ad00609f34a56d6796400eb8191?s=96&d=mm&r=g\",\"caption\":\"Stratio\"},\"description\":\"Stratio guides businesses on their journey through complete #DigitalTransformation with #BigData and #AI. Stratio works worldwide for large companies and multinationals in the sectors of banking, insurance, healthcare, telco, retail, energy and media.\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Top-k queries in Cassandra: An embedded mapreduce approach - Stratio","description":"Stratio has just added top-k queries support to its Lucene based implementation of the Cassandra\u2019s secondary indexes.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/","og_locale":"en_US","og_type":"article","og_title":"Top-k queries in Cassandra: An embedded mapreduce approach","og_description":"Stratio has just added top-k queries support to its Lucene based implementation of the Cassandra\u2019s secondary indexes.","og_url":"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/","og_site_name":"Stratio","article_published_time":"2015-03-13T09:05:47+00:00","article_modified_time":"2023-09-20T13:46:09+00:00","og_image":[{"width":730,"height":312,"url":"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/03\/Cassandra.jpg","type":"image\/jpeg"}],"author":"Stratio","twitter_card":"summary_large_image","twitter_creator":"@stratiobd","twitter_site":"@stratiobd","twitter_misc":{"Written by":"Stratio","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/#article","isPartOf":{"@id":"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/"},"author":{"name":"Stratio","@id":"https:\/\/www.stratio.com\/blog\/#\/schema\/person\/d0377b199cd052b17e15c9ba44c45ab7"},"headline":"Top-k queries in Cassandra: An embedded mapreduce approach","datePublished":"2015-03-13T09:05:47+00:00","dateModified":"2023-09-20T13:46:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/"},"wordCount":546,"publisher":{"@id":"https:\/\/www.stratio.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/#primaryimage"},"thumbnailUrl":"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/03\/Cassandra.jpg","keywords":["spark"],"articleSection":["Product"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/","url":"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/","name":"Top-k queries in Cassandra: An embedded mapreduce approach - Stratio","isPartOf":{"@id":"https:\/\/www.stratio.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/#primaryimage"},"image":{"@id":"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/#primaryimage"},"thumbnailUrl":"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/03\/Cassandra.jpg","datePublished":"2015-03-13T09:05:47+00:00","dateModified":"2023-09-20T13:46:09+00:00","description":"Stratio has just added top-k queries support to its Lucene based implementation of the Cassandra\u2019s secondary indexes.","breadcrumb":{"@id":"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/#primaryimage","url":"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/03\/Cassandra.jpg","contentUrl":"https:\/\/www.stratio.com\/blog\/wp-content\/uploads\/2015\/03\/Cassandra.jpg","width":730,"height":312},{"@type":"BreadcrumbList","@id":"https:\/\/www.stratio.com\/blog\/top-k-queries-in-cassandra-an-embedded-mapreduce-approach\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.stratio.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Top-k queries in Cassandra: An embedded mapreduce approach"}]},{"@type":"WebSite","@id":"https:\/\/www.stratio.com\/blog\/#website","url":"https:\/\/www.stratio.com\/blog\/","name":"Stratio Blog","description":"Corporate blog","publisher":{"@id":"https:\/\/www.stratio.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.stratio.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.stratio.com\/blog\/#organization","name":"Stratio","url":"https:\/\/www.stratio.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.stratio.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/stratio.com\/blog\/wp-content\/uploads\/2020\/06\/stratio-web-logo-1.png","contentUrl":"https:\/\/stratio.com\/blog\/wp-content\/uploads\/2020\/06\/stratio-web-logo-1.png","width":260,"height":55,"caption":"Stratio"},"image":{"@id":"https:\/\/www.stratio.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/stratiobd","https:\/\/es.linkedin.com\/company\/stratiobd","https:\/\/www.youtube.com\/c\/StratioBD"]},{"@type":"Person","@id":"https:\/\/www.stratio.com\/blog\/#\/schema\/person\/d0377b199cd052b17e15c9ba44c45ab7","name":"Stratio","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.stratio.com\/blog\/#\/schema\/person\/image\/bb38888f58c2bb664646155f78ae6ccc","url":"https:\/\/secure.gravatar.com\/avatar\/e3387ad00609f34a56d6796400eb8191?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e3387ad00609f34a56d6796400eb8191?s=96&d=mm&r=g","caption":"Stratio"},"description":"Stratio guides businesses on their journey through complete #DigitalTransformation with #BigData and #AI. Stratio works worldwide for large companies and multinationals in the sectors of banking, insurance, healthcare, telco, retail, energy and media."}]}},"authors":[{"term_id":795,"user_id":1,"is_guest":0,"slug":"stratioadmin","display_name":"Stratio","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/e3387ad00609f34a56d6796400eb8191?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/posts\/1405"}],"collection":[{"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/comments?post=1405"}],"version-history":[{"count":9,"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/posts\/1405\/revisions"}],"predecessor-version":[{"id":13860,"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/posts\/1405\/revisions\/13860"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/media\/116"}],"wp:attachment":[{"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/media?parent=1405"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/categories?post=1405"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/tags?post=1405"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.stratio.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=1405"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}