[ADF-3496] Grouped facet queries (#4209)

* [ADF-3496] search query format v2 response parser

- replacer for the parseFacetFields

* [ADF-3496] format v2 search facetQueries parser

* [ADF-3496] cleanup

* [ADF-3496] Grouped facet queries

- selection working
- needs code cleanup

* [ADF-3496] code cleanup

* [ADF-3496] code refactoring - renaming

* [ADF-3496] update tests

* [ADF-3496] update tests part2

* [ADF-3496] preserve order

* [ADF-3496] fix facet queries expand

* [ADF-3496] code cleanup & fixes

* [ADF-3496] reorder methods

* [ADF-3496] update test

* fix unrelated failing test

* [ADF-3496] fix config snippet

* [ADF-3496] facet queries mincount

* [ADF-3496] documentation updated

* [ADF-3496] small fix

* [ADF-3496] e2e testing

* [ADF-3496] added TestRail ids

* [ADF-3496] import from right api
This commit is contained in:
Suzana Dirla
2019-02-04 23:38:21 +02:00
committed by Eugenio Romano
parent c91c3f5a81
commit bf718d905f
20 changed files with 377 additions and 379 deletions

View File

@@ -50,7 +50,6 @@ export class SearchQueryBuilderService {
paging: { maxItems?: number; skipCount?: number } = null;
sorting: Array<SearchSortingDefinition> = [];
protected userFacetQueries: FacetQuery[] = [];
protected userFacetBuckets: { [key: string]: Array<FacetFieldBucket> } = {};
get userQuery(): string {
@@ -81,39 +80,12 @@ export class SearchQueryBuilderService {
this.categories = (this.config.categories || []).filter((category) => category.enabled);
this.filterQueries = this.config.filterQueries || [];
this.userFacetBuckets = {};
this.userFacetQueries = [];
if (this.config.sorting) {
this.sorting = this.config.sorting.defaults || [];
}
}
}
/**
* Adds a facet query.
* @param query Query to add
*/
addUserFacetQuery(query: FacetQuery) {
if (query) {
const existing = this.userFacetQueries.find((facetQuery) => facetQuery.label === query.label);
if (existing) {
existing.query = query.query;
} else {
this.userFacetQueries.push({ ...query });
}
}
}
/**
* Removes an existing facet query.
* @param query Query to remove
*/
removeUserFacetQuery(query: FacetQuery) {
if (query) {
this.userFacetQueries = this.userFacetQueries
.filter((facetQuery) => facetQuery.label !== query.label);
}
}
/**
* Adds a facet bucket to a field.
* @param field The target field
@@ -240,7 +212,7 @@ export class SearchQueryBuilderService {
}
if (query) {
const result: QueryBody = {
const result: QueryBody = <QueryBody> {
query: {
query: query,
language: 'afts'
@@ -254,6 +226,7 @@ export class SearchQueryBuilderService {
sort: this.sort
};
result['facetFormat'] = 'V2';
return result;
}
@@ -282,6 +255,10 @@ export class SearchQueryBuilderService {
return [];
}
getQueryGroup(query) {
return query.group || this.config.facetQueries.label || 'Facet Queries';
}
/**
* Checks if FacetQueries has been defined
* @returns True if defined, false otherwise
@@ -309,6 +286,7 @@ export class SearchQueryBuilderService {
protected get facetQueries(): FacetQuery[] {
if (this.hasFacetQueries) {
return this.config.facetQueries.queries.map((query) => {
query.group = this.getQueryGroup(query);
return <FacetQuery> { ...query };
});
}
@@ -333,13 +311,6 @@ export class SearchQueryBuilderService {
.filter((entry) => entry)
.join(' AND ');
if (this.userFacetQueries && this.userFacetQueries.length > 0) {
const combined = this.userFacetQueries
.map((userQuery) => userQuery.query)
.join(' OR ');
result += ` AND (${combined})`;
}
if (this.userFacetBuckets) {
Object.keys(this.userFacetBuckets).forEach((key) => {
const subQuery = (this.userFacetBuckets[key] || [])