Remove highlight query (#13231)
* Change use of all_fields in highlight_query to default_field * Remove highlight query and option * Fix tests * Remove unused setting * Remove lingering references to all_fields
This commit is contained in:
parent
84a34e333c
commit
9bdba7c84f
|
@ -38,8 +38,6 @@ document.
|
||||||
`discover:aggs:terms:size`:: Determines how many terms will be visualized when clicking the "visualize" button, in the field drop downs, in the discover sidebar. The default value is `20`.
|
`discover:aggs:terms:size`:: Determines how many terms will be visualized when clicking the "visualize" button, in the field drop downs, in the discover sidebar. The default value is `20`.
|
||||||
`doc_table:highlight`:: Highlight results in Discover and Saved Searches Dashboard. Highlighting makes request slow when
|
`doc_table:highlight`:: Highlight results in Discover and Saved Searches Dashboard. Highlighting makes request slow when
|
||||||
working on big documents. Set this property to `false` to disable highlighting.
|
working on big documents. Set this property to `false` to disable highlighting.
|
||||||
`doc_table:highlight:all_fields`:: Improves highlighting by using a separate `highlight_query` that uses `all_fields` mode on
|
|
||||||
`query_string` queries. Set to `false` if you are using a `default_field` in your index.
|
|
||||||
`courier:maxSegmentCount`:: Kibana splits requests in the Discover app into segments to limit the size of requests sent to
|
`courier:maxSegmentCount`:: Kibana splits requests in the Discover app into segments to limit the size of requests sent to
|
||||||
the Elasticsearch cluster. This setting constrains the length of the segment list. Long segment lists can significantly
|
the Elasticsearch cluster. This setting constrains the length of the segment list. Long segment lists can significantly
|
||||||
increase request processing time.
|
increase request processing time.
|
||||||
|
|
|
@ -5,53 +5,19 @@ describe('getHighlightRequest', () => {
|
||||||
let configMock;
|
let configMock;
|
||||||
const getConfig = (key) => configMock[key];
|
const getConfig = (key) => configMock[key];
|
||||||
const queryStringQuery = { query_string: { query: 'foo' } };
|
const queryStringQuery = { query_string: { query: 'foo' } };
|
||||||
const queryStringWithDefaultFieldQuery = { query_string: { query: 'foo', default_field: 'bar' } };
|
|
||||||
const queryStringWithFieldQuery = { query_string: { query: 'foo', fields: ['bar'] } };
|
|
||||||
const rangeQuery = { range: { '@timestamp': { gte: 0, lte: 0 } } };
|
|
||||||
const boolQueryWithSingleCondition = {
|
|
||||||
bool: {
|
|
||||||
must: queryStringQuery,
|
|
||||||
}
|
|
||||||
};
|
|
||||||
const boolQueryWithMultipleConditions = {
|
|
||||||
bool: {
|
|
||||||
must: [
|
|
||||||
queryStringQuery,
|
|
||||||
rangeQuery
|
|
||||||
]
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
beforeEach(function () {
|
beforeEach(function () {
|
||||||
configMock = {};
|
configMock = {};
|
||||||
configMock['doc_table:highlight'] = true;
|
configMock['doc_table:highlight'] = true;
|
||||||
configMock['doc_table:highlight:all_fields'] = true;
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should be a function', () => {
|
it('should be a function', () => {
|
||||||
expect(getHighlightRequest).to.be.a(Function);
|
expect(getHighlightRequest).to.be.a(Function);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should add the all_fields param with query_string query without modifying original query', () => {
|
it('should not modify the original query', () => {
|
||||||
const request = getHighlightRequest(queryStringQuery, getConfig);
|
getHighlightRequest(queryStringQuery, getConfig);
|
||||||
expect(request.fields['*']).to.have.property('highlight_query');
|
expect(queryStringQuery.query_string).to.not.have.property('highlight');
|
||||||
expect(request.fields['*'].highlight_query.query_string).to.have.property('all_fields');
|
|
||||||
expect(queryStringQuery.query_string).to.not.have.property('all_fields');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should add the all_fields param with bool query with single condition without modifying original query', () => {
|
|
||||||
const request = getHighlightRequest(boolQueryWithSingleCondition, getConfig);
|
|
||||||
expect(request.fields['*']).to.have.property('highlight_query');
|
|
||||||
expect(request.fields['*'].highlight_query.bool.must.query_string).to.have.property('all_fields');
|
|
||||||
expect(queryStringQuery.query_string).to.not.have.property('all_fields');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should add the all_fields param with bool query with multiple conditions without modifying original query', () => {
|
|
||||||
const request = getHighlightRequest(boolQueryWithMultipleConditions, getConfig);
|
|
||||||
expect(request.fields['*']).to.have.property('highlight_query');
|
|
||||||
expect(request.fields['*'].highlight_query.bool.must).to.have.length(boolQueryWithMultipleConditions.bool.must.length);
|
|
||||||
expect(request.fields['*'].highlight_query.bool.must[0].query_string).to.have.property('all_fields');
|
|
||||||
expect(queryStringQuery.query_string).to.not.have.property('all_fields');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return undefined if highlighting is turned off', () => {
|
it('should return undefined if highlighting is turned off', () => {
|
||||||
|
@ -60,12 +26,6 @@ describe('getHighlightRequest', () => {
|
||||||
expect(request).to.be(undefined);
|
expect(request).to.be(undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should not add the highlight_query param if all_fields is turned off', () => {
|
|
||||||
configMock['doc_table:highlight:all_fields'] = false;
|
|
||||||
const request = getHighlightRequest(queryStringQuery, getConfig);
|
|
||||||
expect(request.fields['*']).to.not.have.property('highlight_query');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should enable/disable highlighting if config is changed', () => {
|
it('should enable/disable highlighting if config is changed', () => {
|
||||||
let request = getHighlightRequest(queryStringQuery, getConfig);
|
let request = getHighlightRequest(queryStringQuery, getConfig);
|
||||||
expect(request).to.not.be(undefined);
|
expect(request).to.not.be(undefined);
|
||||||
|
@ -74,20 +34,4 @@ describe('getHighlightRequest', () => {
|
||||||
request = getHighlightRequest(queryStringQuery, getConfig);
|
request = getHighlightRequest(queryStringQuery, getConfig);
|
||||||
expect(request).to.be(undefined);
|
expect(request).to.be(undefined);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should not add the all_fields param with query_string query when default_field is specified', () => {
|
|
||||||
const request = getHighlightRequest(queryStringWithDefaultFieldQuery, getConfig);
|
|
||||||
expect(request.fields['*']).to.have.property('highlight_query');
|
|
||||||
expect(request.fields['*'].highlight_query.query_string).to.have.property('default_field');
|
|
||||||
expect(request.fields['*'].highlight_query.query_string).to.not.have.property('all_fields');
|
|
||||||
expect(queryStringQuery.query_string).to.not.have.property('all_fields');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should not add the all_fields param with query_string query when fields are specified', () => {
|
|
||||||
const request = getHighlightRequest(queryStringWithFieldQuery, getConfig);
|
|
||||||
expect(request.fields['*']).to.have.property('highlight_query');
|
|
||||||
expect(request.fields['*'].highlight_query.query_string).to.have.property('fields');
|
|
||||||
expect(request.fields['*'].highlight_query.query_string).to.not.have.property('all_fields');
|
|
||||||
expect(queryStringQuery.query_string).to.not.have.property('all_fields');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,43 +1,15 @@
|
||||||
import _ from 'lodash';
|
|
||||||
import { highlightTags } from './highlight_tags';
|
import { highlightTags } from './highlight_tags';
|
||||||
|
|
||||||
const FRAGMENT_SIZE = Math.pow(2, 31) - 1; // Max allowed value for fragment_size (limit of a java int)
|
const FRAGMENT_SIZE = Math.pow(2, 31) - 1; // Max allowed value for fragment_size (limit of a java int)
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a clone of the query with `"all_fields": true` set on any `query_string` queries
|
|
||||||
*/
|
|
||||||
function getHighlightQuery(query) {
|
|
||||||
const clone = _.cloneDeep(query);
|
|
||||||
|
|
||||||
if (
|
|
||||||
_.has(clone, 'query_string')
|
|
||||||
&& !_.has(clone, ['query_string', 'default_field'])
|
|
||||||
&& !_.has(clone, ['query_string', 'fields'])
|
|
||||||
) {
|
|
||||||
clone.query_string.all_fields = true;
|
|
||||||
} else if (_.has(clone, 'bool.must')) {
|
|
||||||
if (Array.isArray(clone.bool.must)) {
|
|
||||||
clone.bool.must = clone.bool.must.map(getHighlightQuery);
|
|
||||||
} else {
|
|
||||||
clone.bool.must = getHighlightQuery(clone.bool.must);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return clone;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getHighlightRequest(query, getConfig) {
|
export function getHighlightRequest(query, getConfig) {
|
||||||
if (!getConfig('doc_table:highlight')) return;
|
if (!getConfig('doc_table:highlight')) return;
|
||||||
|
|
||||||
const fieldsParams = getConfig('doc_table:highlight:all_fields')
|
|
||||||
? { highlight_query: getHighlightQuery(query) }
|
|
||||||
: {};
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
pre_tags: [highlightTags.pre],
|
pre_tags: [highlightTags.pre],
|
||||||
post_tags: [highlightTags.post],
|
post_tags: [highlightTags.post],
|
||||||
fields: {
|
fields: {
|
||||||
'*': fieldsParams
|
'*': {}
|
||||||
},
|
},
|
||||||
fragment_size: FRAGMENT_SIZE
|
fragment_size: FRAGMENT_SIZE
|
||||||
};
|
};
|
||||||
|
|
|
@ -10,7 +10,7 @@ export function getUiSettingDefaults() {
|
||||||
readonly: true
|
readonly: true
|
||||||
},
|
},
|
||||||
'query:queryString:options': {
|
'query:queryString:options': {
|
||||||
value: '{ "analyze_wildcard": true }',
|
value: '{ "analyze_wildcard": true, "default_field": "*" }',
|
||||||
description: '<a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html" target="_blank">Options</a> for the lucene query string parser',
|
description: '<a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html" target="_blank">Options</a> for the lucene query string parser',
|
||||||
type: 'json'
|
type: 'json'
|
||||||
},
|
},
|
||||||
|
@ -91,11 +91,6 @@ export function getUiSettingDefaults() {
|
||||||
description: 'Highlight results in Discover and Saved Searches Dashboard.' +
|
description: 'Highlight results in Discover and Saved Searches Dashboard.' +
|
||||||
'Highlighting makes requests slow when working on big documents.',
|
'Highlighting makes requests slow when working on big documents.',
|
||||||
},
|
},
|
||||||
'doc_table:highlight:all_fields': {
|
|
||||||
value: true,
|
|
||||||
description: 'Improves highlighting by using a separate "highlight_query" that uses "all_fields" mode on "query_string" queries. ' +
|
|
||||||
'Set to false if you are using a "default_field" in your index.',
|
|
||||||
},
|
|
||||||
'courier:maxSegmentCount': {
|
'courier:maxSegmentCount': {
|
||||||
value: 30,
|
value: 30,
|
||||||
description: 'Requests in discover are split into segments to prevent massive requests from being sent to ' +
|
description: 'Requests in discover are split into segments to prevent massive requests from being sent to ' +
|
||||||
|
|
Loading…
Reference in a new issue