From 6c863e5bba55ad1502967cc314face9090010dd2 Mon Sep 17 00:00:00 2001 From: Peter Bacon Darwin Date: Thu, 4 Sep 2014 14:23:04 +0100 Subject: [PATCH] chore(docs): improve searching by member The keywords processor now also extracts the members (i.e. method, properties and events) into its own search term property. These are then used in the lunr search index with higher weighting that normal keywords to push services that contain the query term as a member higher up the search results. Closes #7661 --- docs/app/src/search.js | 4 +++- docs/config/processors/keywords.js | 18 +++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/docs/app/src/search.js b/docs/app/src/search.js index 23755871..f7a6cad0 100644 --- a/docs/app/src/search.js +++ b/docs/app/src/search.js @@ -74,6 +74,7 @@ angular.module('search', []) var index = lunrSearch(function() { this.ref('id'); this.field('title', {boost: 50}); + this.field('members', { boost: 40}); this.field('keywords', { boost : 20 }); }); @@ -82,7 +83,8 @@ angular.module('search', []) index.store({ id : key, title : page.searchTerms.titleWords, - keywords : page.searchTerms.keywords + keywords : page.searchTerms.keywords, + members : page.searchTerms.members }); }; }); diff --git a/docs/config/processors/keywords.js b/docs/config/processors/keywords.js index 7b3dd7e6..cf029fcc 100644 --- a/docs/config/processors/keywords.js +++ b/docs/config/processors/keywords.js @@ -1,3 +1,4 @@ +"use strict"; var _ = require('lodash'); var log = require('winston'); var fs = require('fs'); @@ -5,7 +6,7 @@ var path = require('canonical-path'); module.exports = { name: 'keywords', - runAfter: ['docs-processed'], + runAfter: ['docs-processed', 'api-docs'], runBefore: ['adding-extra-docs'], description: 'This processor extracts all the keywords from the document', process: function(docs, config) { @@ -52,7 +53,7 @@ module.exports = { _.forEach(tokens, function(token){ var match = token.match(KEYWORD_REGEX); if (match){ - key = match[1]; + var key = match[1]; if ( !keywordMap[key]) { keywordMap[key] = true; words.push(key); @@ -69,17 +70,28 @@ module.exports = { var words = []; var keywordMap = _.clone(ignoreWordsMap); + var members = []; + var membersMap = {}; // Search each top level property of the document for search terms _.forEach(doc, function(value, key) { + if ( _.isString(value) && !propertiesToIgnore[key] ) { extractWords(value, words, keywordMap); } + + if ( key === 'methods' || key === 'properties' || key === 'events' ) { + _.forEach(value, function(member) { + extractWords(member.name, members, membersMap); + }); + } }); + doc.searchTerms = { titleWords: extractTitleWords(doc.name), - keywords: _.sortBy(words).join(' ') + keywords: _.sortBy(words).join(' '), + members: _.sortBy(members).join(' ') }; });