{"id":7153,"date":"2019-07-03T18:54:18","date_gmt":"2019-07-04T01:54:18","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=7153"},"modified":"2021-07-13T00:46:05","modified_gmt":"2021-07-13T07:46:05","slug":"a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/","title":{"rendered":"A Glimpse of FTS Performance Improvements in 6.5.0 &#8211; Part 1"},"content":{"rendered":"<p><span style=\"font-weight: 400\">Ever since the nimbler, refined `<\/span><a href=\"https:\/\/www.couchbase.com\/blog\/scorch-index-type-why-does-it-matter\/\"><span style=\"font-weight: 400\">scorch<\/span><\/a><span style=\"font-weight: 400\">` indexing format released in Couchbase 6.0.0, the FTS team has been pretty excited about the future optimisation potential unlocked with the newer indexing scheme. With the 6.5.0 release, we have essentially embarked on a never ending journey of optimising and tuning the performance of the Full Text Search engine.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">Let me share a few bits about the interesting optimisations we are introducing in the upcoming release 6.5.0.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<h4><b>Geo Queries <\/b><\/h4>\n<p><span style=\"font-weight: 400\">FTS supports two types of geo queries &#8211; <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/current\/fts\/fts-geospatial-queries.html\"><span style=\"font-weight: 400\">Point Distance and Bounded Rectangle<\/span><\/a><span style=\"font-weight: 400\">. Since the feature inception, we haven\u2019t got a chance to revise and improve this feature, though it was almost certain that the query implementation needs improvements both in terms of memory and CPU utilisation. The good news is that &#8211; out of all the upcoming performance improvements in 6.5.0, we have seen the biggest gains with the geo changes.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h5><b>Opportunity<\/b><\/h5>\n<p><span style=\"font-weight: 400\">As a part of analysing the high memory usage by geo queries &#8211; it became clear that there is a huge performance tuning potential left untapped. In case of both point distance and bounded rectangle query types, the indexing engine (<\/span><a href=\"https:\/\/github.com\/blevesearch\/bleve\"><span style=\"font-weight: 400\">bleve<\/span><\/a><span style=\"font-weight: 400\">) has to figure out the range of geo points to be searched (candidate terms) which qualifies the search criteria from the given query parameters. Bleve derives those candidate geo terms through certain mathematical steps.<\/span><\/p>\n<p><span style=\"font-weight: 400\">But it wasn\u2019t doing any filtering of the mathematically generated candidate geo terms. In other words, an unintentional amplification of the search space was happening in the background. And this was triggering the creation of too many unnecessary or irrelevant term search iterators(eg: terms which don\u2019t even exist in the index), which then leads to a lot of internal temporary objects to manage and further adding a large overhead to the Garbage Collector.\u00a0<\/span><\/p>\n<h5><b>Response<\/b><\/h5>\n<p><span style=\"font-weight: 400\">We optimised this case by applying a geo term filtering which basically validates the mathematically generated geo points for its existence in the Terms Dictionary and qualify them only if its present in the Term Dictionary. This approach significantly reduced the number of candidate geo points\/terms getting searched against the inverted index and thus improved both the latency and throughput numbers for Geo queries.<\/span><\/p>\n<h5><b>Reward<\/b><\/h5>\n<p><span style=\"font-weight: 400\">This has brought in an improvement of up to <\/span><b>6X<\/b><span style=\"font-weight: 400\"> latency reduction for geo queries in our internal benchmarks.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h4><b>Fuzzy Queries <\/b><\/h4>\n<p><span style=\"font-weight: 400\">In pre <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/scorch-index-type-why-does-it-matter\/\"><span style=\"font-weight: 400\">scorch<\/span><\/a><span style=\"font-weight: 400\"> days, when a <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/current\/fts\/fts-query-types.html#fuzzy-query\"><span style=\"font-weight: 400\">fuzzy\/edit-distance<\/span><\/a><span style=\"font-weight: 400\"> query is received, the indexing engine would have gone through each and every term indexed against the given field in query to compute the edit distance to figure out whether the current term lies within the asked edit distance with the query term. And if it qualifies that edit distance criteria, it will look up the term in the inverted index to fetch the list of documents in which the term appears and necessary details as mandated by the query. (term vectors, doc values <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/6.0\/fts\/fts-creating-indexes.html#inserting-a-child-field\"><span style=\"font-weight: 400\">etc<\/span><\/a><span style=\"font-weight: 400\">)\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">The recent scorch indexing format uses FiniteStateTransducers(<\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Finite-state_transducer\"><span style=\"font-weight: 400\">FST<\/span><\/a><span style=\"font-weight: 400\">) for implementing the Terms Dictionary which has this nice <\/span><a href=\"https:\/\/cseweb.ucsd.edu\/classes\/sp15\/cse191-e\/lec3.html\"><span style=\"font-weight: 400\">DFA<\/span><\/a><span style=\"font-weight: 400\"> property. This helped us to improve on the novice approach for finding the candidate terms with in a given edit distance from query.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">The approach is to build a <\/span><b>L<\/b><span style=\"font-weight: 400\">evenshtein <\/span><b>A<\/b><span style=\"font-weight: 400\">utomaton(<\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Levenshtein_automaton\"><span style=\"font-weight: 400\">LA<\/span><\/a><span style=\"font-weight: 400\">) for the given term in the edit distance query. This LA is a DFA which has the property of matching all the terms which are at most at an edit distance of given \u201cd\u201d in the query. And this LA DFA would then be made to step together or make an intersection with the original indexed term corpus\/Terms Dictionary (FST DFA) to filter the candidate terms that needs to be eventually searched as a part of the query.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h5><b>Opportunity<\/b><\/h5>\n<p><span style=\"font-weight: 400\">Until 6.0 release, we were making the LA DFA afresh on every incoming query and this LA DFA building part turned out to be taxing in terms of memory use and speed of the DFA construction.<\/span><\/p>\n<h5><b>Response<\/b><\/h5>\n<p><span style=\"font-weight: 400\"> Inspired by the original <\/span><a href=\"https:\/\/citeseerx.ist.psu.edu\/viewdoc\/summary?doi=10.1.1.16.652\"><span style=\"font-weight: 400\">paper<\/span><\/a><span style=\"font-weight: 400\"> and the blog post &#8211; <\/span><a href=\"https:\/\/fulmicoton.com\/posts\/levenshtein\/\"><span style=\"font-weight: 400\">levenshtein<\/span><\/a><span style=\"font-weight: 400\">, the newer levenshtein automaton construction takes a two step approach. In the first step, it precomputes a parametric DFA for a set of pre-defined* edit distances and this part is completely independent of the query string and hence this can be precomputed. In the second step, this parametric DFA is used to compute the per query LA DFA. And this makes the DFA construction pretty fast and memory friendly.<\/span><\/p>\n<h5><b>Reward<\/b><\/h5>\n<p><span style=\"font-weight: 400\">Go micro benchmarks showed that the newer implementation is up to <\/span><b>5X<\/b><span style=\"font-weight: 400\"> faster and <\/span><b>12X<\/b><span style=\"font-weight: 400\"> better in memory usage. And in our internal performance tests, this has brought up to <strong>~50%<\/strong> throughput improvements for query.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">Glad to see that you scrolled all the way down here.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Let me take an abrupt stop here to ease your attention span and save the remaining tales for\u00a0 Part 2. The next part will cover the performance gains with the gRPC adoption in FTS as well as that with queries like numeric range, prefix, wildcard etc.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h5><strong>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0<em> \u00a0&#8230; <a href=\"https:\/\/www.couchbase.com\/blog\/fts-performance-improvements-in-6-5-0-part-2\/\">Part 2<\/a><\/em><\/strong><\/h5>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\">{pre-defined* edit distances =&gt; as of now FTS supports edit distance of upto 2. ie only 1 and 2.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">The primary reason for this is, in any reasonably sized document corpus there will be too many terms matching an edit distance &gt; 2 from the query term. Hence any further index lookup becomes very resource intensive along with the poorer search relevance.}<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ever since the nimbler, refined `scorch` indexing format released in Couchbase 6.0.0, the FTS team has been pretty excited about the future optimisation potential unlocked with the newer indexing scheme. With the 6.5.0 release, we have essentially embarked on a [&hellip;]<\/p>\n","protected":false},"author":26446,"featured_media":5952,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,2165],"tags":[2378],"ppma_author":[9075],"class_list":["post-7153","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-full-text-search","tag-6-5"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.8 (Yoast SEO v25.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>A Glimpse of FTS Performance Improvements in 6.5.0 - Part 1 - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"FTS performance improvements on geo queries, fuzzy\/edit distance queries, levenshtein automaton, FSTs, bounded rectangle, point distance queries.\" \/>\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.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A Glimpse of FTS Performance Improvements in 6.5.0 - Part 1\" \/>\n<meta property=\"og:description\" content=\"FTS performance improvements on geo queries, fuzzy\/edit distance queries, levenshtein automaton, FSTs, bounded rectangle, point distance queries.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-07-04T01:54:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-07-13T07:46:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/11\/116-hero-liquid-water-drop.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"386\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Sreekanth Sivasankaran\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sreekanth Sivasankaran\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/\"},\"author\":{\"name\":\"Sreekanth Sivasankaran\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/7bbda3cf57beae8bd9cba686c0c6fe7a\"},\"headline\":\"A Glimpse of FTS Performance Improvements in 6.5.0 &#8211; Part 1\",\"datePublished\":\"2019-07-04T01:54:18+00:00\",\"dateModified\":\"2021-07-13T07:46:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/\"},\"wordCount\":894,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/11\/116-hero-liquid-water-drop.jpg\",\"keywords\":[\"6.5\"],\"articleSection\":[\"Couchbase Server\",\"Full-Text Search\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/\",\"name\":\"A Glimpse of FTS Performance Improvements in 6.5.0 - Part 1 - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/11\/116-hero-liquid-water-drop.jpg\",\"datePublished\":\"2019-07-04T01:54:18+00:00\",\"dateModified\":\"2021-07-13T07:46:05+00:00\",\"description\":\"FTS performance improvements on geo queries, fuzzy\/edit distance queries, levenshtein automaton, FSTs, bounded rectangle, point distance queries.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/11\/116-hero-liquid-water-drop.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/11\/116-hero-liquid-water-drop.jpg\",\"width\":1024,\"height\":386},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A Glimpse of FTS Performance Improvements in 6.5.0 &#8211; Part 1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/7bbda3cf57beae8bd9cba686c0c6fe7a\",\"name\":\"Sreekanth Sivasankaran\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/a60af16118050d1ea3a927388dc4dfb7\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/01af11c4c81e84e518ab465b39b7a5b3c874de79270af74043cc3d4edb92ff4e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/01af11c4c81e84e518ab465b39b7a5b3c874de79270af74043cc3d4edb92ff4e?s=96&d=mm&r=g\",\"caption\":\"Sreekanth Sivasankaran\"},\"description\":\"Sreekanth Sivasankaran is a Principal Engineer\/Senior Engineering manager at Couchbase R&amp;D. He leads the design and development of distributed and highly performant Search functionality. And he has over 17 years of product development experience in various domains like telecom, handsets, enterprise software, big data technologies, and distributed systems.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/sreekanth-sivasankaran\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"A Glimpse of FTS Performance Improvements in 6.5.0 - Part 1 - The Couchbase Blog","description":"FTS performance improvements on geo queries, fuzzy\/edit distance queries, levenshtein automaton, FSTs, bounded rectangle, point distance queries.","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.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/","og_locale":"en_US","og_type":"article","og_title":"A Glimpse of FTS Performance Improvements in 6.5.0 - Part 1","og_description":"FTS performance improvements on geo queries, fuzzy\/edit distance queries, levenshtein automaton, FSTs, bounded rectangle, point distance queries.","og_url":"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-07-04T01:54:18+00:00","article_modified_time":"2021-07-13T07:46:05+00:00","og_image":[{"width":1024,"height":386,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/11\/116-hero-liquid-water-drop.jpg","type":"image\/jpeg"}],"author":"Sreekanth Sivasankaran","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Sreekanth Sivasankaran","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/"},"author":{"name":"Sreekanth Sivasankaran","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/7bbda3cf57beae8bd9cba686c0c6fe7a"},"headline":"A Glimpse of FTS Performance Improvements in 6.5.0 &#8211; Part 1","datePublished":"2019-07-04T01:54:18+00:00","dateModified":"2021-07-13T07:46:05+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/"},"wordCount":894,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/11\/116-hero-liquid-water-drop.jpg","keywords":["6.5"],"articleSection":["Couchbase Server","Full-Text Search"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/","url":"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/","name":"A Glimpse of FTS Performance Improvements in 6.5.0 - Part 1 - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/11\/116-hero-liquid-water-drop.jpg","datePublished":"2019-07-04T01:54:18+00:00","dateModified":"2021-07-13T07:46:05+00:00","description":"FTS performance improvements on geo queries, fuzzy\/edit distance queries, levenshtein automaton, FSTs, bounded rectangle, point distance queries.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/11\/116-hero-liquid-water-drop.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/11\/116-hero-liquid-water-drop.jpg","width":1024,"height":386},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/a-glimpse-of-fts-performance-improvements-in-6-5-0-part-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"A Glimpse of FTS Performance Improvements in 6.5.0 &#8211; Part 1"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/7bbda3cf57beae8bd9cba686c0c6fe7a","name":"Sreekanth Sivasankaran","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/a60af16118050d1ea3a927388dc4dfb7","url":"https:\/\/secure.gravatar.com\/avatar\/01af11c4c81e84e518ab465b39b7a5b3c874de79270af74043cc3d4edb92ff4e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/01af11c4c81e84e518ab465b39b7a5b3c874de79270af74043cc3d4edb92ff4e?s=96&d=mm&r=g","caption":"Sreekanth Sivasankaran"},"description":"Sreekanth Sivasankaran is a Principal Engineer\/Senior Engineering manager at Couchbase R&amp;D. He leads the design and development of distributed and highly performant Search functionality. And he has over 17 years of product development experience in various domains like telecom, handsets, enterprise software, big data technologies, and distributed systems.","url":"https:\/\/www.couchbase.com\/blog\/author\/sreekanth-sivasankaran\/"}]}},"authors":[{"term_id":9075,"user_id":26446,"is_guest":0,"slug":"sreekanth-sivasankaran","display_name":"Sreekanth Sivasankaran","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/01af11c4c81e84e518ab465b39b7a5b3c874de79270af74043cc3d4edb92ff4e?s=96&d=mm&r=g","author_category":"","last_name":"Sivasankaran","first_name":"Sreekanth","job_title":"","user_url":"","description":"Sreekanth Sivasankaran is a Principal Engineer\/Senior Engineering Manager at Couchbase R&amp;D. He leads the design and development of distributed and highly performant Search functionality. And he has over 17 years of product development experience in various domains like telecom, handsets, enterprise software, big data technologies, and distributed systems."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/7153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/26446"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=7153"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/7153\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/5952"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=7153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=7153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=7153"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=7153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}