@@ -16,28 +16,24 @@ import {
16
16
USE_CASE ,
17
17
Workflow ,
18
18
getIndexName ,
19
- getSemanticSearchValues ,
19
+ getNeuralSearchValues ,
20
20
} from '../../../../common' ;
21
21
import { searchIndex , useAppDispatch } from '../../../store' ;
22
22
import { getCore } from '../../../services' ;
23
- import { getFormattedJSONString } from './utils' ;
23
+ import {
24
+ NeuralSparseValues ,
25
+ SemanticSearchValues ,
26
+ WorkflowValues ,
27
+ getFormattedJSONString ,
28
+ } from './utils' ;
24
29
25
30
interface QueryExecutorProps {
26
31
workflow : Workflow ;
27
32
}
28
33
29
- type WorkflowValues = {
30
- modelId : string ;
31
- } ;
32
-
33
- type SemanticSearchValues = WorkflowValues & {
34
- inputField : string ;
35
- vectorField : string ;
36
- } ;
37
-
38
34
type QueryGeneratorFn = (
39
35
queryText : string ,
40
- workflowValues : SemanticSearchValues
36
+ workflowValues : SemanticSearchValues | NeuralSparseValues
41
37
) => { } ;
42
38
43
39
/**
@@ -187,9 +183,13 @@ export function QueryExecutor(props: QueryExecutorProps) {
187
183
function getQueryGeneratorFn ( workflow : Workflow ) : QueryGeneratorFn {
188
184
let fn ;
189
185
switch ( workflow . use_case ) {
190
- case USE_CASE . SEMANTIC_SEARCH :
191
- default : {
186
+ case USE_CASE . SEMANTIC_SEARCH : {
192
187
fn = ( ) => generateSemanticSearchQuery ;
188
+ break ;
189
+ }
190
+ case USE_CASE . NEURAL_SPARSE_SEARCH :
191
+ default : {
192
+ fn = ( ) => generateNeuralSparseQuery ;
193
193
}
194
194
}
195
195
return fn ;
@@ -201,7 +201,7 @@ function getWorkflowValues(workflow: Workflow): WorkflowValues {
201
201
switch ( workflow . use_case ) {
202
202
case USE_CASE . SEMANTIC_SEARCH :
203
203
default : {
204
- values = getSemanticSearchValues ( workflow ) ;
204
+ values = getNeuralSearchValues ( workflow ) ;
205
205
}
206
206
}
207
207
return values ;
@@ -213,6 +213,7 @@ function generateSemanticSearchQuery(
213
213
workflowValues : SemanticSearchValues
214
214
) : { } {
215
215
return {
216
+ // TODO: can make this configurable
216
217
_source : {
217
218
excludes : [ `${ workflowValues . vectorField } ` ] ,
218
219
} ,
@@ -221,13 +222,35 @@ function generateSemanticSearchQuery(
221
222
[ workflowValues . vectorField ] : {
222
223
query_text : queryText ,
223
224
model_id : workflowValues . modelId ,
225
+ // TODO: expose k as configurable
224
226
k : 5 ,
225
227
} ,
226
228
} ,
227
229
} ,
228
230
} ;
229
231
}
230
232
233
+ // utility fn to generate a neural sparse search query
234
+ function generateNeuralSparseQuery (
235
+ queryText : string ,
236
+ workflowValues : NeuralSparseValues
237
+ ) : { } {
238
+ return {
239
+ // TODO: can make this configurable
240
+ _source : {
241
+ excludes : [ `${ workflowValues . vectorField } ` ] ,
242
+ } ,
243
+ query : {
244
+ neural_sparse : {
245
+ [ workflowValues . vectorField ] : {
246
+ query_text : queryText ,
247
+ model_id : workflowValues . modelId ,
248
+ } ,
249
+ } ,
250
+ } ,
251
+ } ;
252
+ }
253
+
231
254
function processHits ( hits : any [ ] ) : { } [ ] {
232
255
return hits . map ( ( hit ) => hit . _source ) ;
233
256
}
0 commit comments