@@ -49,8 +49,6 @@ use metrics::SEARCH_METRICS;
4949use quickwit_common:: tower:: Pool ;
5050use quickwit_doc_mapper:: DocMapper ;
5151use quickwit_query:: query_ast:: QueryAst ;
52- use root:: { finalize_aggregation, validate_request} ;
53- use service:: SearcherContext ;
5452use tantivy:: schema:: NamedFieldDocument ;
5553
5654/// Refer to this as `crate::Result<T>`.
@@ -59,15 +57,11 @@ pub type Result<T> = std::result::Result<T, SearchError>;
5957use std:: net:: SocketAddr ;
6058use std:: sync:: Arc ;
6159
62- use anyhow:: Context ;
6360pub use find_trace_ids_collector:: FindTraceIdsCollector ;
64- use itertools:: Itertools ;
65- use quickwit_config:: { build_doc_mapper, SearcherConfig } ;
61+ use quickwit_config:: SearcherConfig ;
6662use quickwit_doc_mapper:: tag_pruning:: extract_tags_from_query;
6763use quickwit_metastore:: { ListSplitsQuery , Metastore , SplitMetadata , SplitState } ;
68- use quickwit_proto:: {
69- Hit , IndexUid , PartialHit , SearchRequest , SearchResponse , SplitIdAndFooterOffsets ,
70- } ;
64+ use quickwit_proto:: { IndexUid , PartialHit , SearchRequest , SplitIdAndFooterOffsets } ;
7165use quickwit_storage:: StorageResolver ;
7266use tantivy:: DocAddress ;
7367
@@ -173,102 +167,6 @@ fn convert_document_to_json_string(
173167 Ok ( content_json)
174168}
175169
176- /// Performs a search on the current node.
177- /// See also `[distributed_search]`.
178- pub async fn single_node_search (
179- mut search_request : SearchRequest ,
180- metastore : & dyn Metastore ,
181- storage_resolver : StorageResolver ,
182- ) -> crate :: Result < SearchResponse > {
183- let start_instant = tokio:: time:: Instant :: now ( ) ;
184- let index_metadata = metastore. index_metadata ( & search_request. index_id ) . await ?;
185- let index_uid = index_metadata. index_uid . clone ( ) ;
186- let index_config = index_metadata. into_index_config ( ) ;
187-
188- let doc_mapper = build_doc_mapper ( & index_config. doc_mapping , & index_config. search_settings )
189- . map_err ( |err| {
190- SearchError :: InternalError ( format ! ( "Failed to build doc mapper. Cause: {err}" ) )
191- } ) ?;
192-
193- let query_ast: QueryAst = serde_json:: from_str ( & search_request. query_ast ) ?;
194- let query_ast_resolved: QueryAst =
195- query_ast. parse_user_query ( doc_mapper. default_search_fields ( ) ) ?;
196- search_request. query_ast = serde_json:: to_string ( & query_ast_resolved) ?;
197-
198- let index_storage = storage_resolver. resolve ( & index_config. index_uri ) . await ?;
199- let metas = list_relevant_splits ( index_uid, & search_request, metastore) . await ?;
200- let split_metadata: Vec < SplitIdAndFooterOffsets > =
201- metas. iter ( ) . map ( extract_split_and_footer_offsets) . collect ( ) ;
202- validate_request ( & * doc_mapper, & search_request) ?;
203-
204- // Verifying that the query is valid.
205- doc_mapper
206- . query ( doc_mapper. schema ( ) , & query_ast_resolved, true )
207- . map_err ( |err| SearchError :: InvalidQuery ( err. to_string ( ) ) ) ?;
208-
209- let searcher_context = Arc :: new ( SearcherContext :: new ( SearcherConfig :: default ( ) ) ) ;
210-
211- let leaf_search_response = leaf_search (
212- searcher_context. clone ( ) ,
213- & search_request,
214- index_storage. clone ( ) ,
215- & split_metadata[ ..] ,
216- doc_mapper. clone ( ) ,
217- )
218- . await
219- . context ( "Failed to perform leaf search." ) ?;
220-
221- let search_request_opt = if !search_request. snippet_fields . is_empty ( ) {
222- Some ( & search_request)
223- } else {
224- None
225- } ;
226-
227- let fetch_docs_response = fetch_docs (
228- searcher_context. clone ( ) ,
229- leaf_search_response. partial_hits ,
230- index_storage,
231- & split_metadata,
232- doc_mapper,
233- search_request_opt,
234- )
235- . await
236- . context ( "Failed to perform fetch docs." ) ?;
237- let hits: Vec < Hit > = fetch_docs_response
238- . hits
239- . into_iter ( )
240- . map ( |leaf_hit| Hit {
241- json : leaf_hit. leaf_json ,
242- partial_hit : leaf_hit. partial_hit ,
243- snippet : leaf_hit. leaf_snippet_json ,
244- } )
245- . collect ( ) ;
246- let elapsed = start_instant. elapsed ( ) ;
247-
248- let aggregations: Option < QuickwitAggregations > = search_request
249- . aggregation_request
250- . as_ref ( )
251- . map ( |agg| serde_json:: from_str ( agg) )
252- . transpose ( ) ?;
253-
254- let aggregation = finalize_aggregation (
255- leaf_search_response. intermediate_aggregation_result ,
256- aggregations,
257- & searcher_context,
258- ) ?;
259- Ok ( SearchResponse {
260- aggregation,
261- num_hits : leaf_search_response. num_hits ,
262- hits,
263- elapsed_time_micros : elapsed. as_micros ( ) as u64 ,
264- errors : leaf_search_response
265- . failed_splits
266- . iter ( )
267- . map ( |error| format ! ( "{error:?}" ) )
268- . collect_vec ( ) ,
269- } )
270- }
271-
272170/// Starts a search node, aka a `searcher`.
273171pub async fn start_searcher_service (
274172 searcher_config : SearcherConfig ,
0 commit comments