Skip to content

Commit e75eef7

Browse files
authored
Minor unification around query string checks (#24337)
1 parent a5051ac commit e75eef7

File tree

10 files changed

+70
-78
lines changed

10 files changed

+70
-78
lines changed

graylog-storage-elasticsearch7/src/main/java/org/graylog/storage/elasticsearch7/MoreSearchAdapterES7.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import org.graylog2.plugin.Tools;
5454
import org.graylog2.plugin.indexer.searches.timeranges.AbsoluteRange;
5555
import org.graylog2.plugin.indexer.searches.timeranges.TimeRange;
56+
import org.graylog2.search.QueryStringUtils;
5657
import org.slf4j.Logger;
5758
import org.slf4j.LoggerFactory;
5859

@@ -205,7 +206,7 @@ public MoreSearch.Histogram eventHistogram(String queryString, AbsoluteRange tim
205206

206207
private QueryBuilder createQuery(String queryString, TimeRange timerange, Set<String> eventStreams, String filterString,
207208
Set<String> forbiddenSourceStreams, Map<String, Set<String>> extraFilters) {
208-
final QueryBuilder query = (queryString.isEmpty() || queryString.equals("*"))
209+
final QueryBuilder query = QueryStringUtils.isEmptyOrMatchAllQueryString(queryString)
209210
? matchAllQuery()
210211
: queryStringQuery(queryString).allowLeadingWildcard(allowLeadingWildcard);
211212

graylog-storage-elasticsearch7/src/main/java/org/graylog/storage/elasticsearch7/SearchRequestFactory.java

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.graylog2.indexer.searches.Sorting;
3333
import org.graylog2.plugin.Message;
3434
import org.graylog2.plugin.streams.Stream;
35+
import org.graylog2.search.QueryStringUtils;
3536

3637
import java.util.Optional;
3738
import java.util.Set;
@@ -72,17 +73,14 @@ public SearchSourceBuilder create(final ChunkCommand chunkCommand) {
7273
}
7374

7475
public SearchSourceBuilder create(SearchCommand searchCommand) {
75-
final String query = normalizeQuery(searchCommand.query());
76-
77-
final QueryBuilder queryBuilder = isWildcardQuery(query)
78-
? matchAllQuery()
79-
: queryStringQuery(query).allowLeadingWildcard(allowLeadingWildcardSearches);
76+
final String query = QueryStringUtils.normalizeQuery(searchCommand.query());
77+
final QueryBuilder queryBuilder = translateQueryString(query);
8078

8179
final Optional<BoolQueryBuilder> rangeQueryBuilder = searchCommand.range()
8280
.map(TimeRangeQueryFactory::create)
8381
.map(rangeQuery -> boolQuery().must(rangeQuery));
8482
final Optional<BoolQueryBuilder> filterQueryBuilder = searchCommand.filter()
85-
.filter(filter -> !isWildcardQuery(filter))
83+
.filter(filter -> !QueryStringUtils.isEmptyOrMatchAllQueryString(filter))
8684
.map(QueryBuilders::queryStringQuery)
8785
.map(queryStringQuery -> boolQuery().must(queryStringQuery));
8886

@@ -111,10 +109,10 @@ public SearchSourceBuilder create(SearchCommand searchCommand) {
111109
return searchSourceBuilder;
112110
}
113111

114-
private QueryBuilder translateQueryString(String queryString) {
115-
return (queryString.isEmpty() || queryString.trim().equals("*"))
116-
? QueryBuilders.matchAllQuery()
117-
: QueryBuilders.queryStringQuery(queryString).allowLeadingWildcard(allowLeadingWildcardSearches);
112+
private QueryBuilder translateQueryString(final String queryString) {
113+
return QueryStringUtils.isEmptyOrMatchAllQueryString(queryString)
114+
? matchAllQuery()
115+
: queryStringQuery(queryString).allowLeadingWildcard(allowLeadingWildcardSearches);
118116
}
119117

120118
private void applyHighlighting(SearchSourceBuilder searchSourceBuilder, SearchCommand searchCommand) {
@@ -160,17 +158,4 @@ private void applySortingIfPresent(SearchSourceBuilder searchSourceBuilder, Sear
160158
final Sorting sorting = command.sorting().orElse(DEFAULT_SORTING);
161159
searchSourceBuilder.sort(sorting.getField(), SortOrder.valueOf(sorting.getUppercasedDirection()));
162160
}
163-
164-
165-
private boolean isWildcardQuery(String filter) {
166-
return normalizeQuery(filter).equals("*");
167-
}
168-
169-
private String normalizeQuery(String query) {
170-
if (query == null || query.trim().isEmpty()) {
171-
return "*";
172-
}
173-
return query.trim();
174-
}
175-
176161
}

graylog-storage-elasticsearch7/src/main/java/org/graylog/storage/elasticsearch7/views/ElasticsearchBackend.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
import org.graylog2.indexer.ranges.IndexRange;
6060
import org.graylog2.plugin.Message;
6161
import org.graylog2.plugin.indexer.searches.timeranges.TimeRange;
62+
import org.graylog2.search.QueryStringUtils;
6263
import org.graylog2.streams.StreamService;
6364
import org.joda.time.DateTimeZone;
6465
import org.slf4j.Logger;
@@ -110,8 +111,8 @@ public ElasticsearchBackend(Map<String, Provider<ESSearchTypeHandler<? extends S
110111
this.allowLeadingWildcard = allowLeadingWildcard;
111112
}
112113

113-
private QueryBuilder translateQueryString(String queryString) {
114-
return (queryString.isEmpty() || queryString.trim().equals("*"))
114+
private QueryBuilder translateQueryString(final String queryString) {
115+
return QueryStringUtils.isEmptyOrMatchAllQueryString(queryString)
115116
? QueryBuilders.matchAllQuery()
116117
: QueryBuilders.queryStringQuery(queryString).allowLeadingWildcard(allowLeadingWildcard);
117118
}

graylog-storage-opensearch2/src/main/java/org/graylog/storage/opensearch2/MoreSearchAdapterOS2.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import org.graylog2.plugin.Tools;
5454
import org.graylog2.plugin.indexer.searches.timeranges.AbsoluteRange;
5555
import org.graylog2.plugin.indexer.searches.timeranges.TimeRange;
56+
import org.graylog2.search.QueryStringUtils;
5657
import org.slf4j.Logger;
5758
import org.slf4j.LoggerFactory;
5859

@@ -205,7 +206,7 @@ public MoreSearch.Histogram eventHistogram(String queryString, AbsoluteRange tim
205206
}
206207

207208
private QueryBuilder createQuery(String queryString, TimeRange timerange, Set<String> eventStreams, String filterString, Set<String> forbiddenSourceStreams, Map<String, Set<String>> extraFilters) {
208-
final QueryBuilder query = (queryString.isEmpty() || queryString.equals("*"))
209+
final QueryBuilder query = QueryStringUtils.isEmptyOrMatchAllQueryString(queryString)
209210
? matchAllQuery()
210211
: queryStringQuery(queryString).allowLeadingWildcard(allowLeadingWildcard);
211212

graylog-storage-opensearch2/src/main/java/org/graylog/storage/opensearch2/SearchRequestFactory.java

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.graylog2.indexer.searches.Sorting;
3333
import org.graylog2.plugin.Message;
3434
import org.graylog2.plugin.streams.Stream;
35+
import org.graylog2.search.QueryStringUtils;
3536

3637
import java.util.Optional;
3738
import java.util.Set;
@@ -72,17 +73,14 @@ public SearchSourceBuilder create(final ChunkCommand chunkCommand) {
7273
}
7374

7475
public SearchSourceBuilder create(SearchCommand searchCommand) {
75-
final String query = normalizeQuery(searchCommand.query());
76-
77-
final QueryBuilder queryBuilder = isWildcardQuery(query)
78-
? matchAllQuery()
79-
: queryStringQuery(query).allowLeadingWildcard(allowLeadingWildcardSearches);
76+
final String query = QueryStringUtils.normalizeQuery(searchCommand.query());
77+
final QueryBuilder queryBuilder = translateQueryString(query);
8078

8179
final Optional<BoolQueryBuilder> rangeQueryBuilder = searchCommand.range()
8280
.map(TimeRangeQueryFactory::create)
8381
.map(rangeQuery -> boolQuery().must(rangeQuery));
8482
final Optional<BoolQueryBuilder> filterQueryBuilder = searchCommand.filter()
85-
.filter(filter -> !isWildcardQuery(filter))
83+
.filter(filter -> !QueryStringUtils.isEmptyOrMatchAllQueryString(filter))
8684
.map(QueryBuilders::queryStringQuery)
8785
.map(queryStringQuery -> boolQuery().must(queryStringQuery));
8886

@@ -111,10 +109,10 @@ public SearchSourceBuilder create(SearchCommand searchCommand) {
111109
return searchSourceBuilder;
112110
}
113111

114-
private QueryBuilder translateQueryString(String queryString) {
115-
return (queryString.isEmpty() || queryString.trim().equals("*"))
116-
? QueryBuilders.matchAllQuery()
117-
: QueryBuilders.queryStringQuery(queryString).allowLeadingWildcard(allowLeadingWildcardSearches);
112+
private QueryBuilder translateQueryString(final String queryString) {
113+
return QueryStringUtils.isEmptyOrMatchAllQueryString(queryString)
114+
? matchAllQuery()
115+
: queryStringQuery(queryString).allowLeadingWildcard(allowLeadingWildcardSearches);
118116
}
119117

120118
private void applyHighlighting(SearchSourceBuilder searchSourceBuilder, SearchCommand searchCommand) {
@@ -160,17 +158,4 @@ private void applySortingIfPresent(SearchSourceBuilder searchSourceBuilder, Sear
160158
final Sorting sorting = command.sorting().orElse(DEFAULT_SORTING);
161159
searchSourceBuilder.sort(sorting.getField(), SortOrder.valueOf(sorting.getUppercasedDirection()));
162160
}
163-
164-
165-
private boolean isWildcardQuery(String filter) {
166-
return normalizeQuery(filter).equals("*");
167-
}
168-
169-
private String normalizeQuery(String query) {
170-
if (query == null || query.trim().isEmpty()) {
171-
return "*";
172-
}
173-
return query.trim();
174-
}
175-
176161
}

graylog-storage-opensearch2/src/main/java/org/graylog/storage/opensearch2/views/OpenSearchBackend.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import org.graylog2.plugin.Message;
6262
import org.graylog2.plugin.indexer.searches.timeranges.TimeRange;
6363
import org.graylog2.plugin.streams.Stream;
64+
import org.graylog2.search.QueryStringUtils;
6465
import org.graylog2.streams.StreamService;
6566
import org.joda.time.DateTimeZone;
6667
import org.slf4j.Logger;
@@ -111,8 +112,8 @@ public OpenSearchBackend(Map<String, Provider<OSSearchTypeHandler<? extends Sear
111112
this.allowLeadingWildcard = allowLeadingWildcard;
112113
}
113114

114-
private QueryBuilder translateQueryString(String queryString) {
115-
return (queryString.isEmpty() || queryString.trim().equals("*"))
115+
private QueryBuilder translateQueryString(final String queryString) {
116+
return QueryStringUtils.isEmptyOrMatchAllQueryString(queryString)
116117
? QueryBuilders.matchAllQuery()
117118
: QueryBuilders.queryStringQuery(queryString).allowLeadingWildcard(allowLeadingWildcard);
118119
}

graylog-storage-opensearch3/src/main/java/org/graylog/storage/opensearch3/MoreSearchAdapterOS2.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import org.graylog2.plugin.Tools;
5454
import org.graylog2.plugin.indexer.searches.timeranges.AbsoluteRange;
5555
import org.graylog2.plugin.indexer.searches.timeranges.TimeRange;
56+
import org.graylog2.search.QueryStringUtils;
5657
import org.slf4j.Logger;
5758
import org.slf4j.LoggerFactory;
5859

@@ -205,7 +206,7 @@ public MoreSearch.Histogram eventHistogram(String queryString, AbsoluteRange tim
205206
}
206207

207208
private QueryBuilder createQuery(String queryString, TimeRange timerange, Set<String> eventStreams, String filterString, Set<String> forbiddenSourceStreams, Map<String, Set<String>> extraFilters) {
208-
final QueryBuilder query = (queryString.isEmpty() || queryString.equals("*"))
209+
final QueryBuilder query = QueryStringUtils.isEmptyOrMatchAllQueryString(queryString)
209210
? matchAllQuery()
210211
: queryStringQuery(queryString).allowLeadingWildcard(allowLeadingWildcard);
211212

graylog-storage-opensearch3/src/main/java/org/graylog/storage/opensearch3/SearchRequestFactory.java

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.graylog2.indexer.searches.Sorting;
3333
import org.graylog2.plugin.Message;
3434
import org.graylog2.plugin.streams.Stream;
35+
import org.graylog2.search.QueryStringUtils;
3536

3637
import java.util.Optional;
3738
import java.util.Set;
@@ -72,17 +73,14 @@ public SearchSourceBuilder create(final ChunkCommand chunkCommand) {
7273
}
7374

7475
public SearchSourceBuilder create(SearchCommand searchCommand) {
75-
final String query = normalizeQuery(searchCommand.query());
76-
77-
final QueryBuilder queryBuilder = isWildcardQuery(query)
78-
? matchAllQuery()
79-
: queryStringQuery(query).allowLeadingWildcard(allowLeadingWildcardSearches);
76+
final String query = QueryStringUtils.normalizeQuery(searchCommand.query());
77+
final QueryBuilder queryBuilder = translateQueryString(query);
8078

8179
final Optional<BoolQueryBuilder> rangeQueryBuilder = searchCommand.range()
8280
.map(TimeRangeQueryFactory::create)
8381
.map(rangeQuery -> boolQuery().must(rangeQuery));
8482
final Optional<BoolQueryBuilder> filterQueryBuilder = searchCommand.filter()
85-
.filter(filter -> !isWildcardQuery(filter))
83+
.filter(filter -> !QueryStringUtils.isEmptyOrMatchAllQueryString(filter))
8684
.map(QueryBuilders::queryStringQuery)
8785
.map(queryStringQuery -> boolQuery().must(queryStringQuery));
8886

@@ -111,10 +109,10 @@ public SearchSourceBuilder create(SearchCommand searchCommand) {
111109
return searchSourceBuilder;
112110
}
113111

114-
private QueryBuilder translateQueryString(String queryString) {
115-
return (queryString.isEmpty() || queryString.trim().equals("*"))
116-
? QueryBuilders.matchAllQuery()
117-
: QueryBuilders.queryStringQuery(queryString).allowLeadingWildcard(allowLeadingWildcardSearches);
112+
private QueryBuilder translateQueryString(final String queryString) {
113+
return QueryStringUtils.isEmptyOrMatchAllQueryString(queryString)
114+
? matchAllQuery()
115+
: queryStringQuery(queryString).allowLeadingWildcard(allowLeadingWildcardSearches);
118116
}
119117

120118
private void applyHighlighting(SearchSourceBuilder searchSourceBuilder, SearchCommand searchCommand) {
@@ -160,17 +158,4 @@ private void applySortingIfPresent(SearchSourceBuilder searchSourceBuilder, Sear
160158
final Sorting sorting = command.sorting().orElse(DEFAULT_SORTING);
161159
searchSourceBuilder.sort(sorting.getField(), SortOrder.valueOf(sorting.getUppercasedDirection()));
162160
}
163-
164-
165-
private boolean isWildcardQuery(String filter) {
166-
return normalizeQuery(filter).equals("*");
167-
}
168-
169-
private String normalizeQuery(String query) {
170-
if (query == null || query.trim().isEmpty()) {
171-
return "*";
172-
}
173-
return query.trim();
174-
}
175-
176161
}

graylog-storage-opensearch3/src/main/java/org/graylog/storage/opensearch3/views/OpenSearchBackend.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import org.graylog2.plugin.Message;
6262
import org.graylog2.plugin.indexer.searches.timeranges.TimeRange;
6363
import org.graylog2.plugin.streams.Stream;
64+
import org.graylog2.search.QueryStringUtils;
6465
import org.graylog2.streams.StreamService;
6566
import org.joda.time.DateTimeZone;
6667
import org.slf4j.Logger;
@@ -111,8 +112,8 @@ public OpenSearchBackend(Map<String, Provider<OSSearchTypeHandler<? extends Sear
111112
this.allowLeadingWildcard = allowLeadingWildcard;
112113
}
113114

114-
private QueryBuilder translateQueryString(String queryString) {
115-
return (queryString.isEmpty() || queryString.trim().equals("*"))
115+
private QueryBuilder translateQueryString(final String queryString) {
116+
return QueryStringUtils.isEmptyOrMatchAllQueryString(queryString)
116117
? QueryBuilders.matchAllQuery()
117118
: QueryBuilders.queryStringQuery(queryString).allowLeadingWildcard(allowLeadingWildcard);
118119
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* Copyright (C) 2020 Graylog, Inc.
3+
*
4+
* This program is free software: you can redistribute it and/or modify
5+
* it under the terms of the Server Side Public License, version 1,
6+
* as published by MongoDB, Inc.
7+
*
8+
* This program is distributed in the hope that it will be useful,
9+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+
* Server Side Public License for more details.
12+
*
13+
* You should have received a copy of the Server Side Public License
14+
* along with this program. If not, see
15+
* <http://www.mongodb.com/licensing/server-side-public-license>.
16+
*/
17+
package org.graylog2.search;
18+
19+
public class QueryStringUtils {
20+
21+
public static boolean isEmptyOrMatchAllQueryString(final String queryString) {
22+
return normalizeQuery(queryString).equals("*");
23+
}
24+
25+
public static String normalizeQuery(final String queryString) {
26+
if (queryString == null || queryString.trim().isEmpty()) {
27+
return "*";
28+
}
29+
return queryString.trim();
30+
}
31+
}

0 commit comments

Comments
 (0)