22import * as dotenv from 'dotenv' ;
33dotenv . config ( ) ;
44
5- import { CveErrorCodes , CveResult } from '../result/CveResult.js' ;
5+ import { CveResult } from '../result/CveResult.js' ;
66import { SearchProviderSpec } from '../adapters/search/SearchAdapter.js' ;
77import { SearchQueryBuilder } from './SearchQueryBuilder.js' ;
88import { SearchReader } from '../adapters/search/SearchReader.js' ;
9- import { SearchResultData } from "./SearchResultData.js" ;
109
1110
1211/** options when using search()
@@ -21,26 +20,8 @@ export class SearchOptions {
2120 sort : { } [ ] ;
2221 from : number ;
2322 size : number ;
24-
25- }
26-
27- export class SearchAPIOptions extends SearchOptions {
28- searchFields : Array < string > ;
29- filters : Array < object > ;
30- resultsPerPage : number ;
31- rangeObjects : Array < rangeObject >
32- rangeStart : Date ;
33- rangeEnd : Date ;
34- rangeField : string ;
3523}
3624
37- //support for date ranges
38- export class rangeObject {
39- rangeField : string ;
40- rangeStart : Date ;
41- rangeEnd : Date ;
42-
43- }
4425
4526/** A manager class that provides basic search capabilities
4627 * including a flexible search() that provides consistent
@@ -86,121 +67,4 @@ export class BasicSearchManager {
8667 return result
8768 }
8869
89- /** search for text at search provider
90- * @param searchText the text string to search for
91- * @param options options to specify how to search, with well-defined defaults
92- */
93- async apiSearch ( searchText : string , options : Partial < SearchAPIOptions > = undefined , queryStrings ?: Array < object > ) : Promise < CveResult > {
94- let response = undefined ;
95-
96- if ( ! options ) {
97- options = {
98- useCache : true ,
99- searchFields : null ,
100- filters : null ,
101- resultsPerPage : 20 ,
102- rangeObjects : null ,
103- rangeStart : null ,
104- rangeEnd : null ,
105- rangeField : null ,
106- track_total_hits : true ,
107- default_operator : "AND" ,
108- metadataOnly : false ,
109- fields : [ ]
110- } ;
111- }
112-
113- let validateResult = this . validateSearchText ( searchText , options . filters )
114-
115- //Build range object to add to the query
116- let rangeObj = null ;
117- let rangeArray = [ ] ;
118-
119- if ( options . rangeObjects ) {
120- options . rangeObjects . forEach ( rangeObject => {
121- rangeObj = {
122- range : {
123- [ rangeObject . rangeField ] : {
124- "gte" : rangeObject . rangeStart ,
125- "lte" : rangeObject . rangeEnd ,
126- }
127- }
128- } ;
129- rangeArray . push ( rangeObj ) ;
130- } )
131-
132- }
133- //Build query object
134- const queryObj = {
135- must : [ ] ,
136- filter : [
137- ...options . filters
138- ] ,
139- } ;
140-
141- //Add rangeObj only if it exists
142- if ( rangeArray ) {
143- queryObj . filter . push ( ...rangeArray ) ;
144- }
145-
146- if ( searchText != null ) {
147- queryObj . must = [
148- {
149- query_string : {
150- query : searchText ,
151- fields : [ "containers.cna.descriptions.value" ]
152- } ,
153- }
154- ] ;
155- }
156-
157- //Add query_string only if there is text to search
158- else if ( queryStrings != null ) {
159- queryObj . must = [
160- ...queryStrings
161- ] ;
162- } else {
163- delete queryObj . must
164- }
165-
166- if ( validateResult . isOk ( ) ) {
167-
168- response = await this . _searchReader . _client . search ( {
169- index : this . _searchReader . _cveIndex ,
170- body : {
171- query : {
172- bool : queryObj
173-
174- } ,
175- track_total_hits : true ,
176- size : options . resultsPerPage
177- }
178- } ) ;
179-
180- return CveResult . ok ( response . body as SearchResultData ) ;
181- }
182- else {
183- // return CveResult.error(new CveError(1, `Unknown error when searching for ${text}`));
184- return validateResult
185- }
186- }
187-
188- /** validates search text string and marks up CveResult
189- * with errors and/or notes, if any
190- */
191- // @todo
192- validateSearchText ( text : string , filters : Array < object > ) : CveResult {
193-
194- let result : CveResult
195- if ( ! text && ! filters ) {
196- result = CveResult . error ( 9002 )
197- }
198- else {
199- result = CveResult . ok ( "" , [ "no validation was done" ] )
200- }
201-
202- return result
203- }
204-
205-
20670}
0 commit comments