Mongo full text search example
Project: codever  - File:  personal-bookmarks-search.service.js
To perform a text search query on the text index of a collection, you need to use the $text operator.
 In the example below the results are sorted in order of relevance score,
  which you must explicitly project to the $meta textScore field and sort on it:
let getPersonalBookmarksForSearchedTerms = async function (nonSpecialSearchTerms, page, limit, userId, specialSearchFilters, searchInclude) {
  let filter = {userId: userId};
  if ( nonSpecialSearchTerms.length > 0 ) {
    if ( searchInclude === 'any' ) {
      filter.$text = {$search: nonSpecialSearchTerms.join(' ')}
    } else {
      filter.$text = {$search: bookmarksSearchHelper.generateFullSearchText(nonSpecialSearchTerms)};
    }
  }
  addSpecialSearchFiltersToMongoFilter(specialSearchFilters, filter);
  let bookmarks = await Bookmark.find(
    filter,
    {
      score: {$meta: "textScore"}
    }
  )
    .sort({score: {$meta: "textScore"}})
    .skip((page - 1) * limit)
    .limit(limit)
    .lean()
    .exec();
  return bookmarks;
}
By default, the full text search in Mongo looks for any of the terms, so a query of “java exception” will look for the bookmarks
 that container java or exception. You can force an AND search by using the terms in double quotes,
  so the query text would be "java" "exception". This is what the following generateFullSearchText function does for terms
   that you do not want excluded (To exclude a word in mongo, you can prepend a “-” character):
let generateFullSearchText = function (nonSpecialSearchTerms) {
  let termsQuery = '';
  nonSpecialSearchTerms.forEach(searchTerm => {
    if ( searchTerm.startsWith('-') ) {
      termsQuery += ' ' + searchTerm;
    } else { //wrap it in quotes to make it a default AND in search
      termsQuery += ' "' + searchTerm.substring(0, searchTerm.length) + '"';
    }
  });
  return termsQuery.trim();
};
Reference - https://docs.mongodb.com/manual/text-search/
  Shared with  from Codever.
  👉 Use the  Copy to mine
  functionality to copy this snippet to your own personal collection and easy manage
  your code snippets.
  
  
  Codever is open source on Github ⭐🙏
 
          
          