diff --git a/.changeset/es_highlight_exclude.md b/.changeset/es_highlight_exclude.md new file mode 100644 index 000000000..9e7f8dbb2 --- /dev/null +++ b/.changeset/es_highlight_exclude.md @@ -0,0 +1,5 @@ +--- +'contexture-elasticsearch': patch +--- + +node.exclude is removed from highlighting only when `highlightOtherMatches` is falsy. diff --git a/packages/provider-elasticsearch/src/example-types/results/highlighting/request.js b/packages/provider-elasticsearch/src/example-types/results/highlighting/request.js index 2c5ddd7b5..635969d99 100644 --- a/packages/provider-elasticsearch/src/example-types/results/highlighting/request.js +++ b/packages/provider-elasticsearch/src/example-types/results/highlighting/request.js @@ -197,25 +197,27 @@ export let getRequestHighlightFields = (schema, node) => { // TODO: `highlightOtherMatches` is an undocumented configuration value that we // are currently using to work around performance issues when highlighting // fields not included in the node. - if (!node.highlight?.highlightOtherMatches && _.isArray(node.include)) { - const include = expandGlobs(schema, node.include) - let subFields = getSchemaSubFields({ - fields: _.pick(include, schema.fields), - }) - highlightFields = _.pick( - _.uniq([...include, ..._.keys(subFields)]), - highlightFields - ) - } - if (_.isArray(node.exclude)) { - const exclude = expandGlobs(schema, node.exclude) - let subFields = getSchemaSubFields({ - fields: _.pick(exclude, schema.fields), - }) - highlightFields = _.omit( - _.uniq([...exclude, ..._.keys(subFields)]), - highlightFields - ) + if (!node.highlight?.highlightOtherMatches) { + if (_.isArray(node.include)) { + const include = expandGlobs(schema, node.include) + let subFields = getSchemaSubFields({ + fields: _.pick(include, schema.fields), + }) + highlightFields = _.pick( + _.uniq([...include, ..._.keys(subFields)]), + highlightFields + ) + } + if (_.isArray(node.exclude)) { + const exclude = expandGlobs(schema, node.exclude) + let subFields = getSchemaSubFields({ + fields: _.pick(exclude, schema.fields), + }) + highlightFields = _.omit( + _.uniq([...exclude, ..._.keys(subFields)]), + highlightFields + ) + } } return F.mapValuesIndexed( diff --git a/packages/provider-elasticsearch/src/example-types/results/highlighting/request.test.js b/packages/provider-elasticsearch/src/example-types/results/highlighting/request.test.js index 99fe1d156..4d87d51fd 100644 --- a/packages/provider-elasticsearch/src/example-types/results/highlighting/request.test.js +++ b/packages/provider-elasticsearch/src/example-types/results/highlighting/request.test.js @@ -498,7 +498,7 @@ describe('getRequestHighlightFields()', () => { 'city.street.subfield': {}, }) }) - it('should expand exclude, irrespective of highlightOtherMatches', () => { + it('should expand exclude, depending on highlightOtherMatches', () => { const schema = { fields: { state: { @@ -530,7 +530,12 @@ describe('getRequestHighlightFields()', () => { highlight: { highlightOtherMatches: true }, } const actual1 = getRequestHighlightFields(schema, node1) - expect(actual1).toEqual({ state: {}, 'state.subfield': {} }) + expect(actual1).toEqual({ + state: {}, + 'state.subfield': {}, + 'city.street': {}, + 'city.street.subfield': {}, + }) const node2 = { exclude: ['city'], highlight: { highlightOtherMatches: false },