mirror of
https://github.com/elastic/kibana.git
synced 2025-06-28 11:05:39 -04:00
SearchSource: fix docvalue_fields and fields intersection logic (#46724)
* SearchSource: fix docvalue_fields and fields intersection logic * update filter logic to handle docvalue_fields that are just strings
This commit is contained in:
parent
9c85bd364d
commit
3e9b0c81b2
3 changed files with 64 additions and 4 deletions
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
* Licensed to Elasticsearch B.V. under one or more contributor
|
||||||
|
* license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright
|
||||||
|
* ownership. Elasticsearch B.V. licenses this file to you under
|
||||||
|
* the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
* not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export function filterDocvalueFields(docvalueFields, fields) {
|
||||||
|
return docvalueFields.filter(docValue => {
|
||||||
|
const docvalueFieldName = typeof docValue === 'string' ? docValue : docValue.field;
|
||||||
|
return fields.includes(docvalueFieldName);
|
||||||
|
});
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
/*
|
||||||
|
* Licensed to Elasticsearch B.V. under one or more contributor
|
||||||
|
* license agreements. See the NOTICE file distributed with
|
||||||
|
* this work for additional information regarding copyright
|
||||||
|
* ownership. Elasticsearch B.V. licenses this file to you under
|
||||||
|
* the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
* not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { filterDocvalueFields } from './filter_docvalue_fields';
|
||||||
|
|
||||||
|
test('Should exclude docvalue_fields that are not contained in fields', () => {
|
||||||
|
const docvalueFields = [
|
||||||
|
'my_ip_field',
|
||||||
|
{ field: 'my_keyword_field' },
|
||||||
|
{ field: 'my_date_field', 'format': 'epoch_millis' }
|
||||||
|
];
|
||||||
|
const out = filterDocvalueFields(docvalueFields, ['my_ip_field', 'my_keyword_field']);
|
||||||
|
expect(out).toEqual([
|
||||||
|
'my_ip_field',
|
||||||
|
{ field: 'my_keyword_field' },
|
||||||
|
]);
|
||||||
|
});
|
|
@ -81,6 +81,7 @@ import { searchRequestQueue } from '../search_request_queue';
|
||||||
import { FetchSoonProvider } from '../fetch';
|
import { FetchSoonProvider } from '../fetch';
|
||||||
import { FieldWildcardProvider } from '../../field_wildcard';
|
import { FieldWildcardProvider } from '../../field_wildcard';
|
||||||
import { getHighlightRequest } from '../../../../../plugins/data/common/field_formats';
|
import { getHighlightRequest } from '../../../../../plugins/data/common/field_formats';
|
||||||
|
import { filterDocvalueFields } from './filter_docvalue_fields';
|
||||||
|
|
||||||
const FIELDS = [
|
const FIELDS = [
|
||||||
'type',
|
'type',
|
||||||
|
@ -551,12 +552,13 @@ export function SearchSourceProvider(Promise, Private, config) {
|
||||||
flatData.body = flatData.body || {};
|
flatData.body = flatData.body || {};
|
||||||
|
|
||||||
const computedFields = flatData.index.getComputedFields();
|
const computedFields = flatData.index.getComputedFields();
|
||||||
|
|
||||||
flatData.body.stored_fields = computedFields.storedFields;
|
flatData.body.stored_fields = computedFields.storedFields;
|
||||||
flatData.body.script_fields = flatData.body.script_fields || {};
|
flatData.body.script_fields = flatData.body.script_fields || {};
|
||||||
flatData.body.docvalue_fields = flatData.body.docvalue_fields || [];
|
|
||||||
|
|
||||||
_.extend(flatData.body.script_fields, computedFields.scriptFields);
|
_.extend(flatData.body.script_fields, computedFields.scriptFields);
|
||||||
flatData.body.docvalue_fields = _.union(flatData.body.docvalue_fields, computedFields.docvalueFields);
|
|
||||||
|
const defaultDocValueFields = computedFields.docvalueFields ? computedFields.docvalueFields : [];
|
||||||
|
flatData.body.docvalue_fields = flatData.body.docvalue_fields || defaultDocValueFields;
|
||||||
|
|
||||||
if (flatData.body._source) {
|
if (flatData.body._source) {
|
||||||
// exclude source fields for this index pattern specified by the user
|
// exclude source fields for this index pattern specified by the user
|
||||||
|
@ -570,7 +572,7 @@ export function SearchSourceProvider(Promise, Private, config) {
|
||||||
const fields = flatData.fields;
|
const fields = flatData.fields;
|
||||||
if (fields) {
|
if (fields) {
|
||||||
// filter out the docvalue_fields, and script_fields to only include those that we are concerned with
|
// filter out the docvalue_fields, and script_fields to only include those that we are concerned with
|
||||||
flatData.body.docvalue_fields = _.intersection(flatData.body.docvalue_fields, fields);
|
flatData.body.docvalue_fields = filterDocvalueFields(flatData.body.docvalue_fields, fields);
|
||||||
flatData.body.script_fields = _.pick(flatData.body.script_fields, fields);
|
flatData.body.script_fields = _.pick(flatData.body.script_fields, fields);
|
||||||
|
|
||||||
// request the remaining fields from both stored_fields and _source
|
// request the remaining fields from both stored_fields and _source
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue