Skip to content

Commit

Permalink
Merge pull request #29 from slidewiki/SWIK-2535_topics_in_search
Browse files Browse the repository at this point in the history
Add topics field (index & facet)
  • Loading branch information
kprist committed Nov 1, 2018
2 parents a8ccb5f + aa5f446 commit c4656de
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 9 deletions.
3 changes: 2 additions & 1 deletion application/routes.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,12 @@ module.exports = function(server) {
user: Joi.array().items(Joi.number().integer()).single(),
tag: Joi.array().items(Joi.string()).single(),
educationLevel: Joi.array().items(Joi.string()).single(),
topics: Joi.array().items(Joi.string()).single(),
sort: Joi.string().valid('score', 'lastUpdate').default('score'),
expand: Joi.boolean().default(true),
spellcheck: Joi.boolean().default(true),
facets: Joi.boolean().default(false),
facet_exclude: Joi.array().items(Joi.string().valid('kind', 'language', 'user', 'tag', 'educationLevel')).single(),
facet_exclude: Joi.array().items(Joi.string().valid('kind', 'language', 'user', 'tag', 'educationLevel', 'topics')).single(),
facet_prefix_field: Joi.string().valid('language', 'user', 'tag'),
facet_prefix_value: Joi.string(),
highlight: Joi.boolean().default(false),
Expand Down
7 changes: 6 additions & 1 deletion application/solr/collections/decks.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ async function getNodeDocument(deckNode){
firstSlide: deckNode.firstSlide,
creator: deckNode.owner,
contributors: deckNode.contributors,
tags: (_.compact(deckNode.tags) || []),
isRoot: _.isEmpty(roots.filter( (rootDeck) => rootDeck.id !== deckNode.id)),
usage: roots.filter( (rootDeck) => !rootDeck.hidden).map( (u) => { return stringify(u); }),
roots: roots.map( (u) => u.id),
Expand All @@ -42,6 +41,12 @@ async function getNodeDocument(deckNode){
revision_count: deckNode.revisionCount,
};

// we want to distinguish topics from simple tags
// topics are tags with tagType === 'topic'
let tagTypes = _.groupBy(deckNode.tags, (t) => (t.tagType || 'none'));
doc.tags = _.compact(_.map(tagTypes.none || [], 'tagName'));
doc.topics = _.compact(_.map(tagTypes.topic || [], 'tagName'));

// if root, check current node for hidden
// if not root, check usage i.e. the non hidden root decks
doc.active = (doc.isRoot) ? !deckNode.hidden : !_.isEmpty(doc.usage),
Expand Down
7 changes: 6 additions & 1 deletion application/solr/collections/decktree.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ function getAddDocument(deckNode, rootDeck) {
firstSlide: deckNode.firstSlide,
creator: deckNode.owner,
contributors: deckNode.contributors,
tags: (_.compact(deckNode.tags) || []),
isRoot: (deckNode.path.length === 1),
usage: (rootDeck.hidden) ? [] : stringify(rootDeck),
roots: rootDeck.id,
Expand All @@ -46,6 +45,12 @@ function getAddDocument(deckNode, rootDeck) {
revision_count: deckNode.revisionCount,
};

// we want to distinguish topics from simple tags
// topics are tags with tagType === 'topic'
let tagTypes = _.groupBy(deckNode.tags, (t) => (t.tagType || 'none'));
doc.tags = _.compact(_.map(tagTypes.none || [], 'tagName'));
doc.topics = _.compact(_.map(tagTypes.topic || [], 'tagName'));

// tag original translation
doc.isOriginal = (doc.language === doc.originalVariant);

Expand Down
4 changes: 3 additions & 1 deletion application/solr/lib/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ let self = module.exports = {
facets.creator = facets.creator.buckets;
facets.tags = facets.tags.buckets;
facets.educationLevel = facets.educationLevel.buckets;
facets.topics = facets.topics.buckets;
return facets;
},

Expand All @@ -159,7 +160,8 @@ let self = module.exports = {
user: 'creator',
tag: 'tags',
educationLevel: 'educationLevel',
};
topics: 'topics',
};

// For facet fields that are excluded
(query.facet_exclude || []).forEach( (excludedField) => {
Expand Down
20 changes: 15 additions & 5 deletions application/solr/searchResults.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ function getSolrParameters(params) {
params.educationLevel = params.educationLevel.join(' OR ');
}

if (params.topics) {
params.topics = params.topics.join(' OR ');
}

// set sorting field
params.sort = (params.sort) ? params.sort : 'score';
params.hl = (params.highlight) ? params.highlight : false;
Expand Down Expand Up @@ -71,26 +75,30 @@ function getFilters(params) {
];

// use tagged filter clauses, so we can exclude them when faceting
if(params.kind) {
if (params.kind) {
filters.push(`{!tag=kindFilter}kind:(${params.kind})`);
}

if(params.language) {
if (params.language) {
filters.push(`{!tag=languageFilter}language:(${params.language})`);
}

if(params.user) {
if (params.user) {
filters.push(`{!tag=usersFilter}creator:(${params.user})`);
}

if(params.tag) {
if (params.tag) {
filters.push(`{!tag=tagsFilter}tags:(${params.tag})`);
}

if(params.educationLevel) {
if (params.educationLevel) {
filters.push(`{!tag=educationLevelFilter}educationLevel:(${params.educationLevel})`);
}

if (params.topics) {
filters.push(`{!tag=topicsFilter}topics:(${params.topics})`);
}

return filters;
}

Expand All @@ -101,6 +109,7 @@ function getFacetFields(params) {
'{!ex=usersFilter}creator',
'{!ex=tagsFilter}tags',
'{!ex=educationLevelFilter}educationLevel',
'{!ex=topicsFilter}topics',
];
}
function getJsonFacet(facet, excludedFields, exclude=true, facetPrefixField, facetPrefixValue) {
Expand Down Expand Up @@ -145,6 +154,7 @@ function getFacets(excludedFields, facetPrefixField, facetPrefixValue) {
{ field: 'creator', excludeField: 'user', excludeFilter: 'usersFilter'},
{ field: 'tags', excludeField: 'tag', excludeFilter: 'tagsFilter' },
{ field: 'educationLevel', excludeField: 'educationLevel', excludeFilter: 'educationLevelFilter' },
{ field: 'topics', excludeField: 'topics', excludeFilter: 'topicsFilter' },
];

let jsonFacets = {};
Expand Down

0 comments on commit c4656de

Please sign in to comment.