@@ -85,6 +85,9 @@ class TransportGetFindingsSearchAction @Inject constructor(
85
85
val getFindingsRequest = request as ? GetFindingsRequest
86
86
? : recreateObject(request) { GetFindingsRequest (it) }
87
87
val tableProp = getFindingsRequest.table
88
+ val severity = getFindingsRequest.severity
89
+ val detectionType = getFindingsRequest.detectionType
90
+ val searchString = tableProp.searchString
88
91
89
92
val sortBuilder = SortBuilders
90
93
.fieldSort(tableProp.sortString)
@@ -107,12 +110,74 @@ class TransportGetFindingsSearchAction @Inject constructor(
107
110
queryBuilder.filter(QueryBuilders .termQuery(" _id" , getFindingsRequest.findingId))
108
111
}
109
112
113
+ if (! getFindingsRequest.findingIds.isNullOrEmpty()) {
114
+ queryBuilder.filter(QueryBuilders .termsQuery(" id" , getFindingsRequest.findingIds))
115
+ }
116
+
110
117
if (getFindingsRequest.monitorId != null ) {
111
118
queryBuilder.filter(QueryBuilders .termQuery(" monitor_id" , getFindingsRequest.monitorId))
112
119
} else if (getFindingsRequest.monitorIds.isNullOrEmpty() == false ) {
113
120
queryBuilder.filter(QueryBuilders .termsQuery(" monitor_id" , getFindingsRequest.monitorIds))
114
121
}
115
122
123
+ if (getFindingsRequest.startTime != null && getFindingsRequest.endTime != null ) {
124
+ val startTime = getFindingsRequest.startTime!! .toEpochMilli()
125
+ val endTime = getFindingsRequest.endTime!! .toEpochMilli()
126
+ val timeRangeQuery = QueryBuilders .rangeQuery(" timestamp" )
127
+ .from(startTime) // Greater than or equal to start time
128
+ .to(endTime) // Less than or equal to end time
129
+ queryBuilder.filter(timeRangeQuery)
130
+ }
131
+
132
+ if (! detectionType.isNullOrBlank()) {
133
+ val nestedQueryBuilder = QueryBuilders .nestedQuery(
134
+ " queries" ,
135
+ when {
136
+ detectionType.equals(" threat" , ignoreCase = true ) -> {
137
+ QueryBuilders .boolQuery().filter(
138
+ QueryBuilders .prefixQuery(" queries.id" , " threat_intel_" )
139
+ )
140
+ }
141
+ else -> {
142
+ QueryBuilders .boolQuery().mustNot(
143
+ QueryBuilders .prefixQuery(" queries.id" , " threat_intel_" )
144
+ )
145
+ }
146
+ },
147
+ ScoreMode .None
148
+ )
149
+
150
+ // Add the nestedQueryBuilder to the main queryBuilder
151
+ queryBuilder.must(nestedQueryBuilder)
152
+ }
153
+
154
+ if (! searchString.isNullOrBlank()) {
155
+ queryBuilder
156
+ .should(QueryBuilders .matchQuery(" index" , searchString))
157
+ .should(
158
+ QueryBuilders .nestedQuery(
159
+ " queries" ,
160
+ QueryBuilders .matchQuery(" queries.tags" , searchString),
161
+ ScoreMode .None
162
+ )
163
+ )
164
+ .should(QueryBuilders .regexpQuery(" monitor_name" , searchString + " .*" ))
165
+ .minimumShouldMatch(1 )
166
+ }
167
+
168
+ if (! severity.isNullOrBlank()) {
169
+ queryBuilder
170
+ .must(
171
+ QueryBuilders .nestedQuery(
172
+ " queries" ,
173
+ QueryBuilders .boolQuery().should(
174
+ QueryBuilders .matchQuery(" queries.tags" , severity)
175
+ ),
176
+ ScoreMode .None
177
+ )
178
+ )
179
+ }
180
+
116
181
if (! tableProp.searchString.isNullOrBlank()) {
117
182
queryBuilder
118
183
.should(
@@ -134,7 +199,6 @@ class TransportGetFindingsSearchAction @Inject constructor(
134
199
)
135
200
)
136
201
}
137
-
138
202
searchSourceBuilder.query(queryBuilder)
139
203
140
204
client.threadPool().threadContext.stashContext().use {
0 commit comments