public static void boostByMarketingTagMatch(ScoredSolrDoc doc, String keyword, float boost) {
		if (doc == null || keyword == null)
			return;
		
		if (boost <= 0)
			boost = 5.0f;
		
		List<String> keywordList = StringUtil.stringToStringList(keyword, "[ ]");
		int keywordCount = keywordList.size();
		
		// to keep the maximum boost = boost, scale down the boost by number of words in the keyword
		if (keywordCount > 0)
			boost /= (float)keywordCount;
		else
			return;
		
		String marketingTag = doc.getFieldValue(SolrUtil.INDEX_FIELD_MARKETING_TAG);
		if (marketingTag == null || marketingTag.length() == 0)
			return;
		
		List<String> tagList = StringUtil.stringToStringList(marketingTag, "[ ]");
		int tagCount = tagList.size();
		
		// compare the last words between marketing tag and keywords
		int compareSize = (keywordCount < tagCount) ? keywordCount : tagCount;
		
		for (int i = 0; i < compareSize; i++) {
			if (StringUtil.wordMatch(keywordList.get(keywordCount - 1 - i), tagList.get(tagCount - 1 - i))) {
				doc.boostScore(boost);
			} else {
				// do not continue matching if a non-match already found
				break;
			}
		}
	}