Skip to content

Commit e82ab6a

Browse files
authored
WEBDEV-7002 Improve organization & exports for smart query heuristics (#435)
* Add exports for smart query heuristics * Reorganize heuristics * Export required heuristics & types * Fix imports * Clean up some heuristic methods & docs * Fix formatting & add keywords * Log heuristic errors * Better organized wikidata entity map * Remove log statements
1 parent 0b3f828 commit e82ab6a

File tree

12 files changed

+293
-256
lines changed

12 files changed

+293
-256
lines changed

index.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,25 @@ export { CollectionBrowserDataSource } from './src/data-source/collection-browse
33
export { CollectionBrowserDataSourceInterface } from './src/data-source/collection-browser-data-source-interface';
44
export { CollectionBrowserQueryState } from './src/data-source/collection-browser-query-state';
55
export { SortFilterBar } from './src/sort-filter-bar/sort-filter-bar';
6-
export { CollectionDisplayMode, SortField, TileModel } from './src/models';
6+
export {
7+
CollectionDisplayMode,
8+
SortField,
9+
TileModel,
10+
FacetOption,
11+
SelectedFacets,
12+
getDefaultSelectedFacets,
13+
} from './src/models';
714
export { CollectionBrowserLoadingTile } from './src/tiles/collection-browser-loading-tile';
815
export { CollectionTile } from './src/tiles/grid/collection-tile';
916
export { AccountTile } from './src/tiles/grid/account-tile';
1017
export { ItemTile } from './src/tiles/grid/item-tile';
1118
export { TileList } from './src/tiles/list/tile-list';
1219
export { TileListCompact } from './src/tiles/list/tile-list-compact';
1320
export { TileDispatcher } from './src/tiles/tile-dispatcher';
21+
export {
22+
SmartQueryHeuristic,
23+
KeywordFacetMap,
24+
SmartFacet,
25+
} from './src/collection-facets/smart-facets/models';
26+
export * from './src/collection-facets/smart-facets/heuristics/index';
27+
export { SmartQueryHeuristicGroup } from './src/collection-facets/smart-facets/smart-facet-heuristics';

src/collection-facets/smart-facets/dedupe.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ export function dedupe<T extends SmartFacet[] | SmartFacet[][]>(facets: T): T {
1414
const facetsUnnested = facets as SmartFacet[];
1515

1616
let result: SmartFacet[] = [...facetsUnnested];
17-
for (const curFacet of facetsUnnested) {
17+
for (let i = 0; i < result.length; i++) {
18+
const curFacet = result[i];
1819
result = result.filter(
1920
sf => curFacet === sf || !smartFacetEquals(curFacet, sf),
2021
);

src/collection-facets/smart-facets/heuristics/browser-language-heuristic.ts renamed to src/collection-facets/smart-facets/heuristics/browser-language/browser-language-heuristic.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { SmartQueryHeuristic, SmartFacet } from '../models';
1+
import type { SmartQueryHeuristic, SmartFacet } from '../../models';
22

33
export class BrowserLanguageHeuristic implements SmartQueryHeuristic {
44
async getRecommendedFacets(): Promise<SmartFacet[]> {
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export { BrowserLanguageHeuristic } from './browser-language/browser-language-heuristic';
2+
export { QueryKeywordsHeuristic } from './query-keywords/query-keywords-heuristic';
3+
export { WikidataHeuristic } from './wikidata/wikidata-heuristic';

src/collection-facets/smart-facets/heuristics/query-keywords-heuristic.ts

Lines changed: 0 additions & 55 deletions
This file was deleted.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import type { SmartQueryHeuristic, SmartFacet } from '../../models';
2+
import { QUERY_KEYWORDS } from './query-keywords-map';
3+
4+
// If the query contains X keyword but Y facet isn't selected, recommend facet Y
5+
export class QueryKeywordsHeuristic implements SmartQueryHeuristic {
6+
async getRecommendedFacets(query: string): Promise<SmartFacet[]> {
7+
const recommendations: SmartFacet[] = [];
8+
9+
for (const [keyword, facets] of Object.entries(QUERY_KEYWORDS)) {
10+
if (query.includes(keyword)) {
11+
recommendations.push(...facets);
12+
}
13+
}
14+
15+
return recommendations;
16+
}
17+
}
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
import type { KeywordFacetMap, SmartFacet } from '../../models';
2+
3+
const TEXTS: SmartFacet = {
4+
facets: [{ facetType: 'mediatype', bucketKey: 'texts' }],
5+
};
6+
const AUDIO: SmartFacet = {
7+
facets: [{ facetType: 'mediatype', bucketKey: 'audio' }],
8+
};
9+
const MOVIES: SmartFacet = {
10+
facets: [{ facetType: 'mediatype', bucketKey: 'movies' }],
11+
};
12+
const IMAGE: SmartFacet = {
13+
facets: [{ facetType: 'mediatype', bucketKey: 'image' }],
14+
};
15+
const SOFTWARE: SmartFacet = {
16+
facets: [{ facetType: 'mediatype', bucketKey: 'software' }],
17+
};
18+
const ETREE: SmartFacet = {
19+
facets: [{ facetType: 'mediatype', bucketKey: 'etree' }],
20+
};
21+
const WEB: SmartFacet = {
22+
facets: [{ facetType: 'mediatype', bucketKey: 'web' }],
23+
};
24+
const DATA: SmartFacet = {
25+
facets: [{ facetType: 'mediatype', bucketKey: 'data' }],
26+
};
27+
28+
/**
29+
* Map from keywords found in the search query to an array of
30+
* likely-relevant "smart facets" for those keywords.
31+
*/
32+
export const QUERY_KEYWORDS: Readonly<KeywordFacetMap> = {
33+
text: [TEXTS],
34+
book: [TEXTS],
35+
novel: [TEXTS],
36+
magazine: [TEXTS],
37+
newspaper: [TEXTS],
38+
pdf: [TEXTS],
39+
epub: [TEXTS],
40+
audio: [AUDIO],
41+
song: [AUDIO],
42+
music: [AUDIO],
43+
listen: [AUDIO],
44+
podcast: [AUDIO],
45+
radio: [AUDIO],
46+
stream: [AUDIO, MOVIES],
47+
video: [MOVIES],
48+
movie: [MOVIES],
49+
film: [MOVIES],
50+
animation: [MOVIES],
51+
youtube: [MOVIES],
52+
image: [IMAGE],
53+
photo: [IMAGE],
54+
picture: [IMAGE],
55+
painting: [IMAGE],
56+
jpg: [IMAGE],
57+
jpeg: [IMAGE],
58+
png: [IMAGE],
59+
gif: [IMAGE],
60+
software: [SOFTWARE],
61+
app: [SOFTWARE],
62+
program: [SOFTWARE],
63+
game: [SOFTWARE],
64+
arcade: [SOFTWARE],
65+
etree: [ETREE],
66+
concert: [ETREE],
67+
'live music': [ETREE],
68+
'web crawl': [WEB],
69+
dataset: [DATA],
70+
};

src/collection-facets/smart-facets/heuristics/wikidata-heuristic.ts

Lines changed: 0 additions & 191 deletions
This file was deleted.

0 commit comments

Comments
 (0)