forked from geolba/tethys.frontend
Addition of "doctype"/datatype as another possible facet and search element to use
This commit is contained in:
parent
110c2db8bf
commit
03a55f6a58
|
@ -34,6 +34,8 @@ export default class ActiveFacetCategory extends Vue {
|
||||||
return "creator";
|
return "creator";
|
||||||
case "subjects":
|
case "subjects":
|
||||||
return "keyword";
|
return "keyword";
|
||||||
|
case "doctype":
|
||||||
|
return "datatype";
|
||||||
default:
|
default:
|
||||||
return this.categoryName;
|
return this.categoryName;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,8 @@ export default class FacetCategory extends Vue {
|
||||||
return "creator";
|
return "creator";
|
||||||
case "subjects":
|
case "subjects":
|
||||||
return "keyword";
|
return "keyword";
|
||||||
|
case "doctype":
|
||||||
|
return "datatype";
|
||||||
default:
|
default:
|
||||||
return this.filterName;
|
return this.filterName;
|
||||||
}
|
}
|
||||||
|
|
|
@ -140,6 +140,17 @@ export default class VsInput extends Vue {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// To allow search by doctype
|
||||||
|
if (highlight.doctype && highlight.doctype.length > 0) {
|
||||||
|
const highlightedDoctype = highlight.doctype.join(" ");
|
||||||
|
|
||||||
|
const hasDoctypeSuggestion = suggestions.some((suggestion) => suggestion.highlight.toLowerCase() === highlightedDoctype.toLowerCase() && suggestion.type == SearchType.Doctype);
|
||||||
|
if (!hasDoctypeSuggestion) {
|
||||||
|
const suggestion = new Suggestion(dataset.doctype, highlightedDoctype, SearchType.Doctype);
|
||||||
|
suggestions.push(suggestion);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ORIGINAL SOLR ===================================================================================================
|
// ORIGINAL SOLR ===================================================================================================
|
||||||
// if (dataset.title_output.toLowerCase().includes(this.display.toLowerCase())) {
|
// if (dataset.title_output.toLowerCase().includes(this.display.toLowerCase())) {
|
||||||
// const title = dataset.title_output;
|
// const title = dataset.title_output;
|
||||||
|
|
|
@ -82,7 +82,8 @@ export class Suggestion {
|
||||||
export enum SearchType {
|
export enum SearchType {
|
||||||
Title = "title",
|
Title = "title",
|
||||||
Author = "author",
|
Author = "author",
|
||||||
Subject = "subjects" // ** !! The field has this name in OpenSearch!!
|
Subject = "subjects", // ** !! The field has this name in OpenSearch!!
|
||||||
|
Doctype = "doctype"
|
||||||
}
|
}
|
||||||
|
|
||||||
export class DbDataset {
|
export class DbDataset {
|
||||||
|
|
|
@ -96,11 +96,13 @@ export interface HitHighlight {
|
||||||
subjects?: Array<string>;
|
subjects?: Array<string>;
|
||||||
title?: Array<string>;
|
title?: Array<string>;
|
||||||
author?: Array<string>;
|
author?: Array<string>;
|
||||||
|
doctype?: Array<string>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Aggregations { // Equivalent SOLR: FacetFields
|
export interface Aggregations { // Equivalent SOLR: FacetFields
|
||||||
subjects: Subjects;
|
subjects: Subjects;
|
||||||
language: Language;
|
language: Language;
|
||||||
|
doctype: Doctype;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Subjects {
|
export interface Subjects {
|
||||||
|
@ -115,6 +117,12 @@ export interface Language {
|
||||||
buckets: Array<Bucket>;
|
buckets: Array<Bucket>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface Doctype {
|
||||||
|
doc_count_error_upper_bound: number;
|
||||||
|
sum_other_doc_count: number;
|
||||||
|
buckets: Array<Bucket>;
|
||||||
|
}
|
||||||
|
|
||||||
export interface Bucket {
|
export interface Bucket {
|
||||||
key: string;
|
key: string;
|
||||||
doc_count: number;
|
doc_count: number;
|
||||||
|
|
|
@ -42,9 +42,11 @@ class DatasetService {
|
||||||
{ match: { title: { query: term, fuzziness: "AUTO", boost: 3 } } },
|
{ match: { title: { query: term, fuzziness: "AUTO", boost: 3 } } },
|
||||||
{ match: { author: { query: term, fuzziness: "AUTO", boost: 2 } } },
|
{ match: { author: { query: term, fuzziness: "AUTO", boost: 2 } } },
|
||||||
{ match: { subjects: { query: term, fuzziness: "AUTO", boost: 1 } } }, // In SOLR is "subject"!
|
{ match: { subjects: { query: term, fuzziness: "AUTO", boost: 1 } } }, // In SOLR is "subject"!
|
||||||
|
{ match: { doctype: { query: term, fuzziness: "AUTO", boost: 1 } } }, // doctype
|
||||||
{ wildcard: { title: { value: `${lowercaseTerm}*`, boost: 3 } } },
|
{ wildcard: { title: { value: `${lowercaseTerm}*`, boost: 3 } } },
|
||||||
{ wildcard: { author: { value: `${lowercaseTerm}*`, boost: 2 } } },
|
{ wildcard: { author: { value: `${lowercaseTerm}*`, boost: 2 } } },
|
||||||
{ wildcard: { subjects: { value: `${lowercaseTerm}*`, boost: 1 } } } // In SOLR is "subject"!
|
{ wildcard: { subjects: { value: `${lowercaseTerm}*`, boost: 1 } } }, // In SOLR is "subject"!
|
||||||
|
{ wildcard: { doctype: { value: `${lowercaseTerm}*`, boost: 1 } } } // doctype
|
||||||
],
|
],
|
||||||
minimum_should_match: 1
|
minimum_should_match: 1
|
||||||
}
|
}
|
||||||
|
@ -58,7 +60,8 @@ class DatasetService {
|
||||||
subjects: { terms: { field: "subjects.keyword", size: 1000 } }, // In SOLR is "subject"!
|
subjects: { terms: { field: "subjects.keyword", size: 1000 } }, // In SOLR is "subject"!
|
||||||
language: { terms: { field: "language" } }, // << ".keyword" HAS TO BE REMOVED. OTHERWISE BUCKETS ARE NOT OBTAINED FOR THIS
|
language: { terms: { field: "language" } }, // << ".keyword" HAS TO BE REMOVED. OTHERWISE BUCKETS ARE NOT OBTAINED FOR THIS
|
||||||
author: { terms: { field: "author.keyword", size: 1000 } },
|
author: { terms: { field: "author.keyword", size: 1000 } },
|
||||||
year: { terms: { field: "year", size: 100 } } // << ".keyword" HAS TO BE REMOVED. OTHERWISE BUCKETS ARE NOT OBTAINED FOR THIS
|
year: { terms: { field: "year", size: 100 } }, // << ".keyword" HAS TO BE REMOVED. OTHERWISE BUCKETS ARE NOT OBTAINED FOR THIS
|
||||||
|
doctype: { terms: { field: "doctype", size: 50 } } // << ".keyword" HAS TO BE REMOVED. OTHERWISE BUCKETS ARE NOT OBTAINED FOR THIS
|
||||||
},
|
},
|
||||||
// // CONTABO ================================================================================
|
// // CONTABO ================================================================================
|
||||||
// aggs: {
|
// aggs: {
|
||||||
|
@ -72,7 +75,8 @@ class DatasetService {
|
||||||
fields: {
|
fields: {
|
||||||
title: {},
|
title: {},
|
||||||
author: {},
|
author: {},
|
||||||
subjects: {}
|
subjects: {},
|
||||||
|
doctype: {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -333,9 +337,11 @@ class DatasetService {
|
||||||
{ match: { title: { query: suggestion, fuzziness: "AUTO", boost: 3 } } },
|
{ match: { title: { query: suggestion, fuzziness: "AUTO", boost: 3 } } },
|
||||||
{ match: { author: { query: suggestion, fuzziness: "AUTO", boost: 2 } } },
|
{ match: { author: { query: suggestion, fuzziness: "AUTO", boost: 2 } } },
|
||||||
{ match: { subjects: { query: suggestion, fuzziness: "AUTO", boost: 1 } } },
|
{ match: { subjects: { query: suggestion, fuzziness: "AUTO", boost: 1 } } },
|
||||||
|
{ match: { doctype: { query: suggestion, fuzziness: "AUTO", boost: 1 } } },
|
||||||
{ wildcard: { title: { value: `${lowercaseTerm}*`, boost: 3 } } },
|
{ wildcard: { title: { value: `${lowercaseTerm}*`, boost: 3 } } },
|
||||||
{ wildcard: { author: { value: `${lowercaseTerm}*`, boost: 2 } } },
|
{ wildcard: { author: { value: `${lowercaseTerm}*`, boost: 2 } } },
|
||||||
{ wildcard: { subjects: { value: `${lowercaseTerm}*`, boost: 1 } } }
|
{ wildcard: { subjects: { value: `${lowercaseTerm}*`, boost: 1 } } },
|
||||||
|
{ wildcard: { doctype: { value: `${lowercaseTerm}*`, boost: 1 } } }
|
||||||
],
|
],
|
||||||
minimum_should_match: 1
|
minimum_should_match: 1
|
||||||
}
|
}
|
||||||
|
@ -373,7 +379,7 @@ class DatasetService {
|
||||||
|
|
||||||
|
|
||||||
const filters = Object.entries(activeFilterCategories).map(([category, values]) => {
|
const filters = Object.entries(activeFilterCategories).map(([category, values]) => {
|
||||||
if (category === "language" || category === "year") {
|
if (category === "language" || category === "year" || category === "doctype") {
|
||||||
return values.map(value => ({ term: { [category]: value } }));
|
return values.map(value => ({ term: { [category]: value } }));
|
||||||
} else {
|
} else {
|
||||||
return values.map(value => ({ term: { [`${category}.keyword`]: value } }));
|
return values.map(value => ({ term: { [`${category}.keyword`]: value } }));
|
||||||
|
@ -435,7 +441,8 @@ class DatasetService {
|
||||||
subjects: { terms: { field: "subjects.keyword", size: 1000 } }, // In SOLR is "subject"!
|
subjects: { terms: { field: "subjects.keyword", size: 1000 } }, // In SOLR is "subject"!
|
||||||
language: { terms: { field: "language" } }, // ".keyword" HAS TO BE REMOVED. OTHERWISE BUCKETS ARE NOT OBTAINED FOR THIS
|
language: { terms: { field: "language" } }, // ".keyword" HAS TO BE REMOVED. OTHERWISE BUCKETS ARE NOT OBTAINED FOR THIS
|
||||||
author: { terms: { field: "author.keyword", size: 1000 } },
|
author: { terms: { field: "author.keyword", size: 1000 } },
|
||||||
year: { terms: { field: "year", size: 100 } } // ".keyword" HAS TO BE REMOVED. OTHERWISE BUCKETS ARE NOT OBTAINED FOR THIS
|
year: { terms: { field: "year", size: 100 } }, // ".keyword" HAS TO BE REMOVED. OTHERWISE BUCKETS ARE NOT OBTAINED FOR THIS
|
||||||
|
doctype: { terms: { field: "doctype", size: 50 } } // ".keyword" HAS TO BE REMOVED. OTHERWISE BUCKETS ARE NOT OBTAINED FOR THIS
|
||||||
},
|
},
|
||||||
// CONTABO ================================================================================
|
// CONTABO ================================================================================
|
||||||
// aggs: {
|
// aggs: {
|
||||||
|
@ -449,7 +456,8 @@ class DatasetService {
|
||||||
fields: {
|
fields: {
|
||||||
title: {},
|
title: {},
|
||||||
author: {},
|
author: {},
|
||||||
subjects: {}
|
subjects: {},
|
||||||
|
doctype: {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -108,7 +108,7 @@ export default class SearchViewComponent extends Vue {
|
||||||
// this.rdrAPI = new DatasetService();
|
// this.rdrAPI = new DatasetService();
|
||||||
// Trigger search based on provided display and type props
|
// Trigger search based on provided display and type props
|
||||||
if (this.display != "" && this.type != undefined) {
|
if (this.display != "" && this.type != undefined) {
|
||||||
const enumKey: "Title" | "Author" | "Subject" | null = this.getEnumKeyByEnumValue(SearchType, this.type);
|
const enumKey: "Title" | "Author" | "Subject" | "Doctype" | null = this.getEnumKeyByEnumValue(SearchType, this.type);
|
||||||
if (enumKey) {
|
if (enumKey) {
|
||||||
const suggestion = new Suggestion(this.display, "NO-IDEA", SearchType[enumKey]);
|
const suggestion = new Suggestion(this.display, "NO-IDEA", SearchType[enumKey]);
|
||||||
// const suggestion = new Suggestion(this.display, "" , SearchType[enumKey]);
|
// const suggestion = new Suggestion(this.display, "" , SearchType[enumKey]);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user