mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
parent
d131af8da8
commit
a1eebca019
3 changed files with 16 additions and 11 deletions
|
@ -26,9 +26,9 @@ export function registerValueSuggestions(server) {
|
|||
method: ['POST'],
|
||||
handler: async function (req, reply) {
|
||||
const { index } = req.params;
|
||||
const { field, query } = req.payload;
|
||||
const { field, query, boolFilter } = req.payload;
|
||||
const { callWithRequest } = server.plugins.elasticsearch.getCluster('data');
|
||||
const body = getBody({ field, query });
|
||||
const body = getBody({ field, query, boolFilter });
|
||||
try {
|
||||
const response = await callWithRequest(req, 'search', { index, body });
|
||||
const buckets = get(response, 'aggregations.suggestions.buckets') || [];
|
||||
|
@ -41,7 +41,7 @@ export function registerValueSuggestions(server) {
|
|||
});
|
||||
}
|
||||
|
||||
function getBody({ field, query }) {
|
||||
function getBody({ field, query, boolFilter = [] }) {
|
||||
// Helps ensure that the regex is not evaluated eagerly against the terms dictionary
|
||||
const executionHint = 'map';
|
||||
|
||||
|
@ -57,6 +57,11 @@ function getBody({ field, query }) {
|
|||
size: 0,
|
||||
timeout: '1s',
|
||||
terminate_after: terminateAfter,
|
||||
query: {
|
||||
bool: {
|
||||
filter: boolFilter,
|
||||
}
|
||||
},
|
||||
aggs: {
|
||||
suggestions: {
|
||||
terms: {
|
||||
|
|
|
@ -26,9 +26,9 @@ import { getSuggestionsProvider as conjunction } from './conjunction';
|
|||
|
||||
const cursorSymbol = '@kuery-cursor@';
|
||||
|
||||
export function getSuggestionsProvider({ config, indexPatterns }) {
|
||||
export function getSuggestionsProvider({ config, indexPatterns, boolFilter }) {
|
||||
const getSuggestionsByType = mapValues({ field, value, operator, conjunction }, provider => {
|
||||
return provider({ config, indexPatterns });
|
||||
return provider({ config, indexPatterns, boolFilter });
|
||||
});
|
||||
|
||||
return function getSuggestions({ query, selectionStart, selectionEnd }) {
|
||||
|
|
|
@ -24,15 +24,15 @@ import { kfetch } from '../../kfetch';
|
|||
|
||||
const type = 'value';
|
||||
|
||||
const requestSuggestions = memoize((query, field) => {
|
||||
const requestSuggestions = memoize((query, field, boolFilter) => {
|
||||
return kfetch({
|
||||
pathname: `/api/kibana/suggestions/values/${field.indexPatternTitle}`,
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ query, field: field.name }),
|
||||
body: JSON.stringify({ query, field: field.name, boolFilter }),
|
||||
});
|
||||
}, resolver);
|
||||
|
||||
export function getSuggestionsProvider({ config, indexPatterns }) {
|
||||
export function getSuggestionsProvider({ config, indexPatterns, boolFilter }) {
|
||||
const allFields = flatten(
|
||||
indexPatterns.map(indexPattern => {
|
||||
return indexPattern.fields.map(field => ({
|
||||
|
@ -64,7 +64,7 @@ export function getSuggestionsProvider({ config, indexPatterns }) {
|
|||
return [];
|
||||
}
|
||||
|
||||
return requestSuggestions(query, field).then(data => {
|
||||
return requestSuggestions(query, field, boolFilter).then(data => {
|
||||
const quotedValues = data.map(value => `"${escapeQuotes(value)}"`);
|
||||
return wrapAsSuggestions(start, end, query, quotedValues);
|
||||
});
|
||||
|
@ -85,8 +85,8 @@ function wrapAsSuggestions(start, end, query, values) {
|
|||
});
|
||||
}
|
||||
|
||||
function resolver(query, field) {
|
||||
function resolver(query, field, boolFilter) {
|
||||
// Only cache results for a minute
|
||||
const ttl = Math.floor(Date.now() / 1000 / 60);
|
||||
return [ttl, query, field.indexPatternTitle, field.name].join('|');
|
||||
return [ttl, query, field.indexPatternTitle, field.name, JSON.stringify(boolFilter)].join('|');
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue