diff --git a/src/app/datasets/services/dataset-research.service.ts b/src/app/datasets/services/dataset-research.service.ts
index 7d997b67f0eb94cc456389cb86a21032afa92bf7..02d037e58bee55dfa9c873d467fd5204e7859651 100644
--- a/src/app/datasets/services/dataset-research.service.ts
+++ b/src/app/datasets/services/dataset-research.service.ts
@@ -348,6 +348,7 @@ export class DatasetResearchService {
 
   getAutoComplete(text: string): Observable<SearchCompletion[]> {
     const options: SearchCompletion[] = [];
+    const titleOptions : SearchCompletion[] = [];
     return this._elasticsearchService.getAutoComplete(text).pipe(
       map((e) => {
         // We will loop over all the hits, look if an highlight have been found,
@@ -364,18 +365,32 @@ export class DatasetResearchService {
                 // We check if this text highlight already exists in the options array
                 // We want a unique text in the list, no duplicata.
                 const found = options.some((el) => {
-                  return el.text === highlight[key][0];
+                  return el.text.toLowerCase() === highlight[key][0].toLowerCase();
                 });
-                if (!found && options.length < 5) {
-                  searchOption['text'] = highlight[key][0];
-                  options.push(new SearchCompletion(searchOption));
+                const same = text.toLowerCase() === highlight[key][0].toLowerCase().replace(/<[^>]*>/g, '');;
+
+                if (!same && !found ) {
+                  if (key === 'metadata-fr.title' || key === 'content-fr.title') {
+                    searchOption['text'] = highlight[key][0];
+                    titleOptions.push(new SearchCompletion(searchOption));
+                  }
+                  else {
+                    searchOption['text'] = highlight[key][0];
+                    options.push(new SearchCompletion(searchOption));
+                  }
+
                 }
               });
             }
 
           });
         }
-        return options;
+        const results = titleOptions.concat(options);
+        if (results.length > 5) {
+          results.length = 5;
+        }
+
+        return results;
       }),
     );
   }
diff --git a/src/app/elasticsearch/services/elasticsearch.service.ts b/src/app/elasticsearch/services/elasticsearch.service.ts
index 62e429c3b47074225407b9d59f87b87d07a31aeb..f0a78f88cbc548df34528b0aae13d73f9eecc535 100644
--- a/src/app/elasticsearch/services/elasticsearch.service.ts
+++ b/src/app/elasticsearch/services/elasticsearch.service.ts
@@ -192,6 +192,9 @@ export class ElasticsearchService {
           ],
         },
       },
+      collapse: {
+        field: 'uuid.keyword',
+      },
       highlight: {
         order: 'score',
         pre_tags: ['<b>'],
@@ -199,15 +202,26 @@ export class ElasticsearchService {
         highlight_query: {
           query_string: {
             query: regex,
-            fields: ['data_and_metadata', 'content-fr.title', 'content-fr.plaintext'],
+            fields: [
+              'metadata-fr.title^7',
+              'data-fr.properties^4',
+              'metadata-fr.abstract^6',
+              'metadata-fr.keyword^5',
+              'metadata-fr.lineage^4',
+              'content-fr.title^5',
+              'content-fr.excerpt^3',
+              'content-fr.plaintext^3'
+            ],
             analyzer: 'my_search_analyzer',
+            // fields: ['data_and_metadata', 'content-fr.title', 'content-fr.plaintext'],
+            // analyzer: 'my_search_analyzer',
             fuzziness: 'AUTO',
             minimum_should_match: '90%',
           },
         },
         // Rules to construct the highlight fragments
         fields: {
-          '*data-fr.*': {
+          'data-fr.*': {
             fragment_size: 50,
             fragmenter: 'span',
             type: 'unified',
@@ -220,6 +234,20 @@ export class ElasticsearchService {
             fragment_size: 50,
             number_of_fragments: 5,
           },
+          'metadata-fr.title': {
+            number_of_fragments: 0,
+          },
+          'metadata-fr.keyword': {
+            number_of_fragments: 0,
+          },
+          'metadata-fr.abstract': {
+            fragment_size: 50,
+            number_of_fragments: 5,
+          },
+          'metadata-fr.lineage': {
+            fragment_size: 50,
+            number_of_fragments: 5,
+          },
         },
       },
     };
@@ -227,10 +255,21 @@ export class ElasticsearchService {
     request.query.bool.must.push({
       multi_match: {
         query: regex,
-        fields: ['content-fr.title', 'content-fr.plaintext', 'data_and_metadata'],
+        fields: [
+          'metadata-fr.title^7',
+          'data-fr.properties^4',
+          'metadata-fr.abstract^6',
+          'metadata-fr.keyword^5',
+          'metadata-fr.lineage^4',
+          'content-fr.title^5',
+          'content-fr.excerpt^3',
+          'content-fr.plaintext^3'
+        ],
       },
     });
 
+    console.log(request);
+
     return this._http.request<IElasticsearchResponse>('POST', this.elasticSearchUrl, {
       body: request,
       withCredentials: true,