{"id":2144,"date":"2016-02-05T00:05:41","date_gmt":"2016-02-05T00:05:40","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2144"},"modified":"2019-01-28T07:18:46","modified_gmt":"2019-01-28T15:18:46","slug":"couchbase-full-text-cbft-for-content-management","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/","title":{"rendered":"Couchbase Full Text (CBFT) for Content Management"},"content":{"rendered":"<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">Full Text Search (FTS) is a main capability of Content Management systems to search both content and metadata associated to the content. In a\u00a0<a href=\"https:\/\/cecilelepape.blogspot.fr\/2015\/09\/flexible-and-scalable-content.html\">previous blog<\/a>, I already discussed about a new fully scalable architecture for Content Management using Apache Chemistry with Couchbase repository for metadata (and\u00a0<a href=\"https:\/\/cecilelepape.blogspot.fr\/2016\/01\/storing-blobs-in-couchbase-for-content.html\">possibly blobs<\/a>). Today, I would like to discuss about how to integrate FTS capability in a scalable way in this architecture without the need for yet another tier (ElasticSearch, Solr, LudicWorks).<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">In 2015, Couchbase has announced the development of CBFT which stands for Couchbase Full Text search, actually in developer preview. CBFT is simple, integrated distributed Full Text server which covers 80% of features of most applications.You can find more informations on CBFT here:\u00a0<a href=\"https:\/\/connect15.couchbase.com\/agenda\/sneak-peek-cbft-full-text-search-couchbase\/\">https:\/\/connect15.couchbase.com\/agenda\/sneak-peek-cbft-full-text-search-couchbase\/<\/a><\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">In this article, I will start to investigate how to integrate CBFT in CMIS Apache Chemistry for metadata full text search.<\/p>\n<ul style=\"color: #333333; line-height: 20.8px; text-align: left;\">\n<li>Setup<\/li>\n<\/ul>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">To install Couchbase, follow the documentation\u00a0<a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/4.0\/getting-started\/installing.html\">here<\/a>.<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">Create a bucket called\u00a0<em>cmismeta<\/em>. This bucket contains the metatada of each content (folder, file).<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">To install Apache Chemistry using Couchbase repository, follow the documentation\u00a0<a href=\"https:\/\/github.com\/cecilelepape\/cmis-couchbase\">here<\/a>.<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">To install CBFT, follow the documentation\u00a0<a href=\"https:\/\/labs.couchbase.com\/cbft\/\">here<\/a>.<\/p>\n<ul style=\"color: #333333; line-height: 20.8px; text-align: left;\">\n<li>Create a CBFT index<\/li>\n<\/ul>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">Start CBFT on a local node : cbft -s https:\/\/localhost:8091<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">Point your web browser to cbft&#8217;s web admin UI : https:\/\/localhost:8095<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: center;\"><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/january\/couchbase-full-text-cbft-for-content-management\/cbft1.png\" \/><\/p>\n<h4 style=\"font-size: 13px; color: #333333; text-align: start;\"><\/h4>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">On the Indexes listing page, click on the\u00a0<em>New Index\u00a0<\/em>button.<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">Create an index called\u00a0<em>cmis-fts<\/em>\u00a0on bucket cmismeta.<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: center;\"><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/january\/couchbase-full-text-cbft-for-content-management\/cbft2.png\" \/><\/p>\n<ul style=\"color: #333333; line-height: 20.8px; text-align: left;\">\n<li>Test your index<\/li>\n<\/ul>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">To test your index, you need to add content on\u00a0<em>cmismeta<\/em>\u00a0bucket. You can either do it using the Apache Chemistry workbench to create content (folder, files) that will be associated with metadata in\u00a0<em>cmismeta<\/em>\u00a0bucket, or by adding simple content for testing (then remove it).<\/p>\n<p>In this example, I already have a bunch of files added to the Content Management Couchbase repository.<\/p>\n<p>Open the query tab and enter a query using\u00a0<a href=\"https:\/\/www.blevesearch.com\/docs\/Query-String-Query\/\">Bleve syntax<\/a><\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: center;\"><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/january\/couchbase-full-text-cbft-for-content-management\/cbft3.png\" \/><\/p>\n<ul style=\"color: #333333; line-height: 20.8px; text-align: left;\">\n<li>CMIS Apache Chemistry project<\/li>\n<\/ul>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0First, you need to activate the full text query capabilities of CMIS Couchbase repository class.<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">public\u00a0class\u00a0CouchbaseRepository {<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0\u00a0 private\u00a0RepositoryInfo createRepositoryInfo(CmisVersion\u00a0cmisVersion) {<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0 \u00a0 \u00a0 \u00a0 \/\/ set repo infos<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0 \u00a0 \u00a0 \u00a0\u00a0RepositoryInfoImpl\u00a0repositoryInfo\u00a0=\u00a0new\u00a0RepositoryInfoImpl();<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0 \u00a0 \u00a0 \u00a0\u00a0repositoryInfo.setCmisVersionSupported(cmisVersion.value());<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0 \u00a0 \u00a0 \u00a0 &#8230;<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0 \u00a0 \u00a0 \u00a0 \/\/ set repo capabilities<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0 \u00a0 \u00a0\u00a0 RepositoryCapabilitiesImpl\u00a0capabilities\u00a0=\u00a0new\u00a0RepositoryCapabilitiesImpl();<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0 \u00a0 \u00a0 \u00a0 capabilities.setCapabilityQuery(CapabilityQuery.FULLTEXTONLY);<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0 \u00a0 \u00a0 \u00a0 &#8230;<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0 \u00a0 \u00a0 \u00a0\u00a0repositoryInfo.setCapabilities(capabilities);<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0 \u00a0 \u00a0 \u00a0\u00a0return\u00a0repositoryInfo;<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0\u00a0\u00a0\u00a0\u00a0}<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">}<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">To query the CBFT index, we are using the REST API with a Jersey client.<\/p>\n<p>First, add the dependency in the maven pom file.<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0com.sun.jersey<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">jersey-client<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 1.8<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">Then create a new CBFT service class. This service needs the CBFT location and index name. I provides a simple query method returning a list of keys referring to\u00a0<em>cmismeta<\/em>\u00a0bucket in Couchbase.<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">package\u00a0org.apache.chemistry.opencmis.couchbase;<\/p>\n<p>import\u00a0java.util.ArrayList;<br \/>\nimport\u00a0java.util.List;<\/p>\n<p>import\u00a0com.couchbase.client.java.document.json.JsonArray;<br \/>\nimport\u00a0com.couchbase.client.java.document.json.JsonObject;<br \/>\nimport\u00a0com.sun.jersey.api.client.Client;<br \/>\nimport\u00a0com.sun.jersey.api.client.ClientResponse;<br \/>\nimport\u00a0com.sun.jersey.api.client.WebResource;<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">public\u00a0class\u00a0CBFTService\u00a0\u00a0{<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0private\u00a0String\u00a0cbftLocation\u00a0=\u00a0null;<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">private Client\u00a0client\u00a0=\u00a0null;<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">private String\u00a0indexid\u00a0=\u00a0null;<\/p>\n<p>public\u00a0CBFTService(String\u00a0location, String\u00a0indexid) {<br \/>\nthis.cbftLocation\u00a0=\u00a0location;<br \/>\nthis.indexid\u00a0=\u00a0indexid;<br \/>\nclient\u00a0= Client.create();<br \/>\n}<\/p>\n<p>\/** Search\u00a0<u>cbft<\/u>\u00a0index.<br \/>\n*\u00a0@param\u00a0query the query to search<br \/>\n*\u00a0@return\u00a0list of keys matching the query<br \/>\n* *\/<br \/>\npublic\u00a0List query(String\u00a0query){<br \/>\nList\u00a0results\u00a0=\u00a0new\u00a0ArrayList();<\/p>\n<p>WebResource\u00a0webResource\u00a0=\u00a0client<br \/>\n.resource(&#8220;https:\/\/&#8221;+this.cbftLocation+&#8221;:8095\/api\/index\/&#8221;+indexid+&#8221;\/query&#8221;);<\/p>\n<p>String\u00a0input\u00a0=\u00a0&#8220;{&#8221;\u00a0+<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0 \u00a0 \u00a0&#8220;&#8221;q&#8221;: &#8220;&#8221;+query+&#8221;&#8221;,&#8221;\u00a0+<br \/>\n&#8220;&#8221;indexName&#8221;: &#8220;&#8221;+indexid+&#8221;&#8221;,&#8221;\u00a0+<br \/>\n&#8220;&#8221;size&#8221;: 10,&#8221;+<br \/>\n&#8220;&#8221;from&#8221;: 0,&#8221;+<br \/>\n&#8220;&#8221;explain&#8221;: true,&#8221;+<br \/>\n&#8220;&#8221;highlight&#8221;: {},&#8221;\u00a0+<br \/>\n&#8220;&#8221;query&#8221;: {&#8221;\u00a0+<br \/>\n&#8220;&#8221;boost&#8221;: 1,&#8221;+<br \/>\n&#8220;&#8221;query&#8221;: &#8220;&#8221;+query\u00a0+\u00a0&#8220;&#8221;&#8221;+<br \/>\n&#8220;},&#8221;+<br \/>\n&#8220;&#8221;fields&#8221;: [&#8221;\u00a0+<br \/>\n&#8220;&#8221;*&#8221;&#8221;\u00a0+<br \/>\n&#8220;],&#8221;\u00a0+<br \/>\n&#8220;&#8221;ctl&#8221;: {&#8221;\u00a0+<br \/>\n&#8220;&#8221;consistency&#8221;: {&#8220;+<br \/>\n&#8220;&#8221;level&#8221;: &#8220;&#8221;,&#8221;\u00a0+<br \/>\n&#8220;&#8221;vectors&#8221;: {}&#8221;+<br \/>\n&#8220;},&#8221;+<br \/>\n&#8220;&#8221;timeout&#8221;: 0&#8243;+<br \/>\n&#8220;}&#8221;+<br \/>\n&#8220;}&#8221;;<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0 \u00a0 ClientResponse\u00a0response\u00a0=\u00a0webResource.type(&#8220;application\/json&#8221;)<br \/>\n.post(ClientResponse.class,\u00a0input);<\/p>\n<p>if\u00a0(response.getStatus() != 200) {<br \/>\nthrow\u00a0new\u00a0RuntimeException(&#8220;Failed : HTTP error code : &#8221;<br \/>\n+\u00a0response.getStatus());<br \/>\n}<\/p>\n<p>String\u00a0output\u00a0=\u00a0response.getEntity(String.class);<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">JsonObject\u00a0content\u00a0= JsonObject.fromJson(output);<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0 \u00a0JsonArray\u00a0hits\u00a0=\u00a0content.getArray(&#8220;hits&#8221;);<\/p>\n<p>if(hits\u00a0!=\u00a0null){<br \/>\nString\u00a0id;<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0 \u00a0 \u00a0for(int\u00a0i=0 ;\u00a0i&lt;hits.size();\u00a0i++){<br \/>\nid\u00a0=\u00a0hits.getObject(i).getString(&#8220;id&#8221;);<br \/>\nresults.add(id);<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">\u00a0 \u00a0 }<br \/>\n}<\/p>\n<p>return\u00a0results;<\/p>\n<p>}<br \/>\n}<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: left;\">You can now query the Content Management server using the workbench to retrieve content using the CBFT capability and click on the result to see the associated content.<\/p>\n<p style=\"color: #333333; line-height: 20.8px; text-align: center;\"><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/january\/couchbase-full-text-cbft-for-content-management\/cbft4.png\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Full Text Search (FTS) is a main capability of Content Management systems to search both content and metadata associated to the content. In a\u00a0previous blog, I already discussed about a new fully scalable architecture for Content Management using Apache Chemistry [&hellip;]<\/p>\n","protected":false},"author":68,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815],"tags":[],"ppma_author":[9040],"class_list":["post-2144","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials"],"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>Couchbase Full Text (CBFT) for Content Management<\/title>\n<meta name=\"description\" content=\"See how to integrate FTS capability in a scalable way in this architecture without the need for yet another tier (ElasticSearch, Solr, LudicWorks).\" \/>\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\/couchbase-full-text-cbft-for-content-management\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Couchbase Full Text (CBFT) for Content Management\" \/>\n<meta property=\"og:description\" content=\"See how to integrate FTS capability in a scalable way in this architecture without the need for yet another tier (ElasticSearch, Solr, LudicWorks).\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-02-05T00:05:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-01-28T15:18:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Cecile Le Pape, Solutions Architect, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Cecile Le Pape, Solutions Architect, Couchbase\" \/>\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.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/\"},\"author\":{\"name\":\"Cecile Le Pape, Solutions Architect, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/28d00738232281d64e4a632c5acc69b1\"},\"headline\":\"Couchbase Full Text (CBFT) for Content Management\",\"datePublished\":\"2016-02-05T00:05:40+00:00\",\"dateModified\":\"2019-01-28T15:18:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/\"},\"wordCount\":660,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Best Practices and Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/\",\"name\":\"Couchbase Full Text (CBFT) for Content Management\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-02-05T00:05:40+00:00\",\"dateModified\":\"2019-01-28T15:18:46+00:00\",\"description\":\"See how to integrate FTS capability in a scalable way in this architecture without the need for yet another tier (ElasticSearch, Solr, LudicWorks).\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Couchbase Full Text (CBFT) for Content Management\"}]},{\"@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\/28d00738232281d64e4a632c5acc69b1\",\"name\":\"Cecile Le Pape, Solutions Architect, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/97438b032f142721b48bf7eae0f50bcd\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6c0a378c3c8e07dce943defd33929845a490ea466c6fddbb9ee24a71bdc8aa6c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6c0a378c3c8e07dce943defd33929845a490ea466c6fddbb9ee24a71bdc8aa6c?s=96&d=mm&r=g\",\"caption\":\"Cecile Le Pape, Solutions Architect, Couchbase\"},\"description\":\"After 10 years at University of Paris 6 (France) where she worked in the database team on replication, consistency, XML, p2p, syndication and mobile projects, Cecile decided to move on and start a new life experience in industry. Cecile joined the architect team of a small company called Oceane Consulting to develop document management projects. She is now a Solutions Architect at Couchbase and very happy to be involved both on the technical field and sales.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/cecile-le-pape\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Couchbase Full Text (CBFT) for Content Management","description":"See how to integrate FTS capability in a scalable way in this architecture without the need for yet another tier (ElasticSearch, Solr, LudicWorks).","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\/couchbase-full-text-cbft-for-content-management\/","og_locale":"en_US","og_type":"article","og_title":"Couchbase Full Text (CBFT) for Content Management","og_description":"See how to integrate FTS capability in a scalable way in this architecture without the need for yet another tier (ElasticSearch, Solr, LudicWorks).","og_url":"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-02-05T00:05:40+00:00","article_modified_time":"2019-01-28T15:18:46+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"Cecile Le Pape, Solutions Architect, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Cecile Le Pape, Solutions Architect, Couchbase","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/"},"author":{"name":"Cecile Le Pape, Solutions Architect, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/28d00738232281d64e4a632c5acc69b1"},"headline":"Couchbase Full Text (CBFT) for Content Management","datePublished":"2016-02-05T00:05:40+00:00","dateModified":"2019-01-28T15:18:46+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/"},"wordCount":660,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Best Practices and Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/","url":"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/","name":"Couchbase Full Text (CBFT) for Content Management","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-02-05T00:05:40+00:00","dateModified":"2019-01-28T15:18:46+00:00","description":"See how to integrate FTS capability in a scalable way in this architecture without the need for yet another tier (ElasticSearch, Solr, LudicWorks).","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-full-text-cbft-for-content-management\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Couchbase Full Text (CBFT) for Content Management"}]},{"@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\/28d00738232281d64e4a632c5acc69b1","name":"Cecile Le Pape, Solutions Architect, Couchbase","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/97438b032f142721b48bf7eae0f50bcd","url":"https:\/\/secure.gravatar.com\/avatar\/6c0a378c3c8e07dce943defd33929845a490ea466c6fddbb9ee24a71bdc8aa6c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6c0a378c3c8e07dce943defd33929845a490ea466c6fddbb9ee24a71bdc8aa6c?s=96&d=mm&r=g","caption":"Cecile Le Pape, Solutions Architect, Couchbase"},"description":"After 10 years at University of Paris 6 (France) where she worked in the database team on replication, consistency, XML, p2p, syndication and mobile projects, Cecile decided to move on and start a new life experience in industry. Cecile joined the architect team of a small company called Oceane Consulting to develop document management projects. She is now a Solutions Architect at Couchbase and very happy to be involved both on the technical field and sales.","url":"https:\/\/www.couchbase.com\/blog\/author\/cecile-le-pape\/"}]}},"authors":[{"term_id":9040,"user_id":68,"is_guest":0,"slug":"cecile-le-pape","display_name":"Cecile Le Pape, Solutions Architect, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/6c0a378c3c8e07dce943defd33929845a490ea466c6fddbb9ee24a71bdc8aa6c?s=96&d=mm&r=g","author_category":"","last_name":"Le Pape","first_name":"Cecile","job_title":"","user_url":"","description":"After 10 years at University of Paris 6 (France) where she worked in the database team on replication, consistency, XML, p2p, syndication and mobile projects, Cecile decided to move on and start a new life experience in industry. Cecile joined the architect team of a small company called Oceane Consulting to develop document management projects. She is now a Solutions Architect at Couchbase and very happy to be involved both on the technical field and sales."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2144","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\/68"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=2144"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2144\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=2144"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=2144"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=2144"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=2144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}