{"id":7344,"date":"2019-08-06T07:02:34","date_gmt":"2019-08-06T14:02:34","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=7344"},"modified":"2024-02-07T11:56:40","modified_gmt":"2024-02-07T19:56:40","slug":"building-autocomplete-or-typeahead-functionality-using-full-text-search","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/","title":{"rendered":"Build autocomplete or typeAhead using Full Text Search"},"content":{"rendered":"<h3><b>What is Autocomplete vs Type Ahead?<\/b><\/h3>\n<p><span style=\"font-weight: 400\">Autocomplete as the<\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Autocomplete\"> <span style=\"font-weight: 400\">wikipedia<\/span><\/a><span style=\"font-weight: 400\"> says<\/span><\/p>\n<p><i><span style=\"font-weight: 400\">\u201cAutocomplete, or word completion, is a feature in which an application predicts the rest of a word a user is typing\u201d<\/span><\/i><\/p>\n<p><span style=\"font-weight: 400\">It is also known as\u00a0 Suggestions or Type Ahead or Search as you Type. This helps in navigating or guiding a user by prompting them with likely completions and alternatives to the text as they are typing it. And It reduces the amount of character a user needs to type for getting the final search results, thereby enhancing the search experience of users.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Let\u2019s explore a couple of functional approaches on how to implement autocomplete the autocomplete feature using Couchbase FTS.<\/span><\/p>\n<h4><b>\u00a0<\/b><\/h4>\n<h4><b>Using Edge NGram approach.<\/b><\/h4>\n<p><span style=\"font-weight: 400\">This approach involves the use of different index and query time analysers.<\/span><\/p>\n<p><b>Step1<\/b><span style=\"font-weight: 400\"> &#8211; is to have the right FTS index definition for the fields that needs to be autocompleted. So during indexing, the autocomplete intended fields have to be analysed with a custom analyser making use of the <a href=\"https:\/\/docs.couchbase.com\/server\/6.0\/fts\/fts-using-analyzers.html#token-filters\">edge-ngram token filter<\/a>. It can also be chained with `to_lower` token filter if concerned about the case sensitivity.\u00a0 <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/6.0\/fts\/fts-creating-indexes.html#inserting-a-child-field\"><b>store <\/b><\/a><span style=\"font-weight: 400\">&#8211; option has to be enabled for the autocomplete field in the index definition to preserve the field contents intact within the FTS index so that this stored field value will be fetched explicitly during the query phase to perform the actual auto complete or suggestions for the user.<\/span><\/p>\n<h5><b>How does an edge ngram token filter works?<\/b><\/h5>\n<p><span style=\"font-weight: 400\">An edge ngram tokeniser will tokenise a given autocomplete text value into sub tokens of length ranging from a given min and max length parameters. For example,\u00a0 an edge-ngram tokeniser of min length 2 and max length 6 would tokenise given the text \u201c<\/span><b>jurassic park<\/b><span style=\"font-weight: 400\">\u201d like below.<\/span><\/p>\n<p><b>ju, jur, jura, juras, jurass, pa, par, park.\u00a0<\/b><\/p>\n<p><span style=\"font-weight: 400\">The idea here is that these tokenised texts of the indexed field would serve as the future potential partial text entries from the user on the user interface.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>Step2<\/b><span style=\"font-weight: 400\"> &#8211; Later when the end user actually starts typing on the text box in the user interface,\u00a0 the client application can trigger search queries in the background with the partial text available in the text box. Clients should specifically use the <a href=\"https:\/\/docs.couchbase.com\/server\/6.0\/fts\/fts-query-types.html#match-query\">match query<\/a> as it has the provisions to explicitly provide,<\/span><\/p>\n<ul>\n<li><span style=\"font-weight: 400\">analyser to be used for the search text.<\/span><\/li>\n<\/ul>\n<p style=\"text-align: right\">\u00a0 \u00a0 Should use a simple analyser for the match query as that should prevent any unnecessary text splitting during the search phase.<\/p>\n<ul>\n<li><span style=\"font-weight: 400\">fuzziness that needs to be applied.<\/span><\/li>\n<\/ul>\n<p style=\"text-align: right\">\u00a0 Can also mention the fuzziness factor if the client is interested in getting autocomplete suggestions with fuzziness applied.<\/p>\n<p><span style=\"font-weight: 400\">these options helps to control the auto complete feature.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Along with the match query, the client should request for the actual auto completed field contents using <\/span><span style=\"font-weight: 400\">`Fields`\u00a0 option in the search request and this value will be used as the auto completed text or type ahead for the user.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400\"><strong>For example,<\/strong> a match query for the partial texts like \u201cjur\u201d\u00a0 or \u201cpa\u201d will match all of the below titles.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Jurassic Park\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Jurassic Park III<\/span><\/p>\n<p><span style=\"font-weight: 400\">The Lost World: Jurassic Park<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><b>Order\/Rank of the Results<\/b> <b>&#8211;\u00a0 <\/b><span style=\"font-weight: 400\">The default <a href=\"https:\/\/en.wikipedia.org\/wiki\/Tf%E2%80%93idf\">tf-idf<\/a> ranks are applicable here for the n-grams which are getting indexed.\u00a0 <\/span><span style=\"font-weight: 400\">Specific order of suggestions are possible by applying any client\/application specific custom sorting on the retrieved field values at the client side.<\/span><\/p>\n<h3><\/h3>\n<p><span style=\"font-weight: 400\">You may check out the sample auto complete <a href=\"https:\/\/github.com\/sreekanth-cb\/autoComplete\"><strong>bootstrap application<\/strong> <\/a><\/span><b>here &#8211;\u00a0<\/b><\/p>\n<div style=\"width: 900px;\" class=\"wp-video\"><!--[if lt IE 9]><script>document.createElement('video');<\/script><![endif]-->\n<video class=\"wp-video-shortcode\" id=\"video-7344-1\" width=\"900\" height=\"571\" loop autoplay preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/08\/CleanShot-2019-08-06-at-16.24.30.mp4?_=1\" \/><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/08\/CleanShot-2019-08-06-at-16.24.30.mp4\">https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/08\/CleanShot-2019-08-06-at-16.24.30.mp4<\/a><\/video><\/div>\n<h4><b>Prefix based Approach<\/b><\/h4>\n<p><span style=\"font-weight: 400\">This approach involves the use of the same index and query time analysers.<\/span><\/p>\n<p><b>Step1<\/b><b> &#8211; <\/b><span style=\"font-weight: 400\">During indexing, autocomplete intended fields have to be analysed with a <a href=\"https:\/\/docs.couchbase.com\/server\/6.0\/fts\/fts-using-analyzers.html#pre-constructed-analyzers\">keyword analyser<\/a>. With keyword analyser, the value of this field will be stored as a keyword so that the entire value will be treated like a single token with all the terms and spaces retained.\u00a0<\/span><\/p>\n<p><b>Step2-<\/b> <span style=\"font-weight: 400\">Later during the query time, this approach involves trying <a href=\"https:\/\/docs.couchbase.com\/server\/6.0\/fts\/fts-query-types.html#prefix-query\">prefix queries<\/a> against the desired field in documents.\u00a0 Similar to the first approach, the client needs to explicitly <\/span><span style=\"font-weight: 400\">request for the actual auto completed field contents using <\/span><span style=\"font-weight: 400\">`Fields`\u00a0 option in the search request and this value will be used as the auto completed text for the user.<\/span><\/p>\n<p><span style=\"font-weight: 400\">This approach has the restriction that the matching is strictly limited to the starting\/prefix of the field value.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\u00a0For example, in use case mentioned above (with partial text like \u201cJur\u201d), with prefix based approach <\/span><\/p>\n<p><span style=\"font-weight: 400\">\u201cJurassic Park\u201d<\/span><\/p>\n<p><span style=\"font-weight: 400\"> \u201cJurassic Park III\u201d <\/span><\/p>\n<p><span style=\"font-weight: 400\">will show up in the results but <\/span><span style=\"font-weight: 400\">\u201cThe Lost World: Jurassic Park\u201d will not show up as it\u2019s prefix (\u201cThe Lost World:\u201d) doesn\u2019t start with \u201cJur\u201d.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>What is Autocomplete vs Type Ahead? Autocomplete as the wikipedia says \u201cAutocomplete, or word completion, is a feature in which an application predicts the rest of a word a user is typing\u201d It is also known as\u00a0 Suggestions or Type [&hellip;]<\/p>\n","protected":false},"author":26446,"featured_media":10571,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1815,2165,2389],"tags":[],"ppma_author":[9075],"class_list":["post-7344","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-best-practices-and-tutorials","category-full-text-search","category-solutions"],"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>typeAhead vs autocomplete: Implement with Full Text Search<\/title>\n<meta name=\"description\" content=\"Type Ahead vs Autocomplete \u2013 What are they and how are they different? Explore functional approaches on how to implement using Full Text Search.\" \/>\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\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Build autocomplete or typeAhead using Full Text Search\" \/>\n<meta property=\"og:description\" content=\"Type Ahead vs Autocomplete \u2013 What are they and how are they different? Explore functional approaches on how to implement using Full Text Search.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-08-06T14:02:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-02-07T19:56:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/08\/Glacier-Gardens-replace-1170x731-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"750\" \/>\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\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/\"},\"author\":{\"name\":\"Sreekanth Sivasankaran\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/7bbda3cf57beae8bd9cba686c0c6fe7a\"},\"headline\":\"Build autocomplete or typeAhead using Full Text Search\",\"datePublished\":\"2019-08-06T14:02:34+00:00\",\"dateModified\":\"2024-02-07T19:56:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/\"},\"wordCount\":786,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Glacier-Gardens-replace-1170x731-1.jpg\",\"articleSection\":[\"Application Design\",\"Best Practices and Tutorials\",\"Full-Text Search\",\"Solutions\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/\",\"name\":\"typeAhead vs autocomplete: Implement with Full Text Search\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Glacier-Gardens-replace-1170x731-1.jpg\",\"datePublished\":\"2019-08-06T14:02:34+00:00\",\"dateModified\":\"2024-02-07T19:56:40+00:00\",\"description\":\"Type Ahead vs Autocomplete \u2013 What are they and how are they different? Explore functional approaches on how to implement using Full Text Search.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Glacier-Gardens-replace-1170x731-1.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Glacier-Gardens-replace-1170x731-1.jpg\",\"width\":1200,\"height\":750},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Build autocomplete or typeAhead using Full Text Search\"}]},{\"@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":"typeAhead vs autocomplete: Implement with Full Text Search","description":"Type Ahead vs Autocomplete \u2013 What are they and how are they different? Explore functional approaches on how to implement using Full Text Search.","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\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/","og_locale":"en_US","og_type":"article","og_title":"Build autocomplete or typeAhead using Full Text Search","og_description":"Type Ahead vs Autocomplete \u2013 What are they and how are they different? Explore functional approaches on how to implement using Full Text Search.","og_url":"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-08-06T14:02:34+00:00","article_modified_time":"2024-02-07T19:56:40+00:00","og_image":[{"width":1200,"height":750,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/08\/Glacier-Gardens-replace-1170x731-1.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\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/"},"author":{"name":"Sreekanth Sivasankaran","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/7bbda3cf57beae8bd9cba686c0c6fe7a"},"headline":"Build autocomplete or typeAhead using Full Text Search","datePublished":"2019-08-06T14:02:34+00:00","dateModified":"2024-02-07T19:56:40+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/"},"wordCount":786,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Glacier-Gardens-replace-1170x731-1.jpg","articleSection":["Application Design","Best Practices and Tutorials","Full-Text Search","Solutions"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/","url":"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/","name":"typeAhead vs autocomplete: Implement with Full Text Search","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Glacier-Gardens-replace-1170x731-1.jpg","datePublished":"2019-08-06T14:02:34+00:00","dateModified":"2024-02-07T19:56:40+00:00","description":"Type Ahead vs Autocomplete \u2013 What are they and how are they different? Explore functional approaches on how to implement using Full Text Search.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Glacier-Gardens-replace-1170x731-1.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Glacier-Gardens-replace-1170x731-1.jpg","width":1200,"height":750},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/building-autocomplete-or-typeahead-functionality-using-full-text-search\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Build autocomplete or typeAhead using Full Text Search"}]},{"@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\/7344","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=7344"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/7344\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/10571"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=7344"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=7344"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=7344"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=7344"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}