Skip to content

Commit ecca730

Browse files
authored
Merge pull request #74 from quickwit-oss/ddelemeny/fix-query-actions
Improve query modifications, skip implicit AND
2 parents d4ddf3a + 788fd75 commit ecca730

File tree

2 files changed

+11
-12
lines changed

2 files changed

+11
-12
lines changed

src/datasource/base.ts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import { getQueryResponseProcessor } from 'datasource/processResponse';
3535

3636
import { SECOND } from 'utils/time';
3737
import { GConstructor } from 'utils/mixins';
38+
import { LuceneQuery } from '@/utils/lucene';
3839

3940
export type BaseQuickwitDataSourceConstructor = GConstructor<BaseQuickwitDataSource>
4041

@@ -114,24 +115,18 @@ export class BaseQuickwitDataSource
114115
return query;
115116
}
116117

117-
let expression = query.query ?? '';
118+
let lquery = LuceneQuery.parse(query.query ?? '')
118119
switch (action.type) {
119120
case 'ADD_FILTER': {
120-
if (expression.length > 0) {
121-
expression += ' AND ';
122-
}
123-
expression += `${action.options.key}:"${action.options.value}"`;
121+
lquery = lquery.addFilter(action.options.key, action.options.value)
124122
break;
125123
}
126124
case 'ADD_FILTER_OUT': {
127-
if (expression.length > 0) {
128-
expression += ' AND ';
129-
}
130-
expression += `-${action.options.key}:"${action.options.value}"`;
125+
lquery = lquery.addFilter(action.options.key, action.options.value, '-')
131126
break;
132127
}
133128
}
134-
return { ...query, query: expression };
129+
return { ...query, query: lquery.toString() };
135130
}
136131

137132
getDataQueryRequest(queryDef: TermsQuery, range: TimeRange) {

src/utils/lucene.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,11 +142,15 @@ function removeNodeFromTree(ast: AST, node: NodeTerm): AST {
142142
/**
143143
* Merge a query with a filter.
144144
*/
145-
export function concatenate(query: string, filter: string, condition = 'AND'): string {
145+
export function concatenate(query: string, filter: string, operator?: 'AND'|'OR'): string {
146146
if (!filter) {
147147
return query;
148148
}
149-
return query.trim() === '' ? filter : `${query} ${condition} ${filter}`;
149+
if (query.trim() === '' ) {
150+
return filter;
151+
}
152+
153+
return operator ? `${query} ${operator} ${filter}` : `${query} ${filter}`
150154
}
151155

152156
export class LuceneQuery {

0 commit comments

Comments
 (0)