Skip to content

Commit 90c59a2

Browse files
authored
Removing single node search. (#3689)
1 parent 800a108 commit 90c59a2

File tree

4 files changed

+80
-148
lines changed

4 files changed

+80
-148
lines changed

.github/workflows/ci.yml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,10 @@ jobs:
5252
with:
5353
filters: |
5454
rust_src:
55-
- quickwit/**.rs
56-
- quickwit/**.toml
57-
- quickwit/**.proto
58-
- ./quickwit/rest-api-tests/**
55+
- quickwit/**/*.rs
56+
- quickwit/**/*.toml
57+
- quickwit/**/*.proto
58+
- quickwit/rest-api-tests/**
5959
# The following step is just meant to install rustup actually.
6060
# The next one installs the correct toolchain.
6161
- name: Install rustup
@@ -103,11 +103,11 @@ jobs:
103103
with:
104104
filters: |
105105
rust_src:
106-
- quickwit/**.rs
107-
- quickwit/**.toml
108-
- quickwit/**.proto
106+
- quickwit/**/*.rs
107+
- quickwit/**/*.toml
108+
- quickwit/**/*.proto
109109
- name: Install Ubuntu packages
110-
if: steps.modified.outputs.rust_src == 'true'
110+
if: always() && steps.modified.outputs.rust_src == 'true'
111111
run: sudo apt-get -y install protobuf-compiler python3 python3-pip
112112
- name: Setup nightly Rust Toolchain (for rustfmt)
113113
uses: actions-rs/toolchain@v1

quickwit/quickwit-search/src/lib.rs

Lines changed: 2 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@ use metrics::SEARCH_METRICS;
4949
use quickwit_common::tower::Pool;
5050
use quickwit_doc_mapper::DocMapper;
5151
use quickwit_query::query_ast::QueryAst;
52-
use root::{finalize_aggregation, validate_request};
53-
use service::SearcherContext;
5452
use 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>;
5957
use std::net::SocketAddr;
6058
use std::sync::Arc;
6159

62-
use anyhow::Context;
6360
pub use find_trace_ids_collector::FindTraceIdsCollector;
64-
use itertools::Itertools;
65-
use quickwit_config::{build_doc_mapper, SearcherConfig};
61+
use quickwit_config::SearcherConfig;
6662
use quickwit_doc_mapper::tag_pruning::extract_tags_from_query;
6763
use 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};
7165
use quickwit_storage::StorageResolver;
7266
use 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`.
273171
pub async fn start_searcher_service(
274172
searcher_config: SearcherConfig,

quickwit/quickwit-search/src/root.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,9 @@ impl Job for SearchJob {
9595
}
9696
}
9797

98-
pub(crate) struct FetchDocsJob {
98+
struct FetchDocsJob {
9999
offsets: SplitIdAndFooterOffsets,
100-
pub partial_hits: Vec<PartialHit>,
100+
partial_hits: Vec<PartialHit>,
101101
}
102102

103103
impl Job for FetchDocsJob {
@@ -186,7 +186,7 @@ fn validate_sort_by_field(field_name: &str, schema: &Schema) -> crate::Result<()
186186
Ok(())
187187
}
188188

189-
pub(crate) fn validate_request(
189+
fn validate_request(
190190
doc_mapper: &dyn DocMapper,
191191
search_request: &SearchRequest,
192192
) -> crate::Result<()> {
@@ -566,7 +566,7 @@ impl<'a, 'b> QueryAstVisitor<'b> for ExtractTimestampRange<'a> {
566566
}
567567
}
568568

569-
pub fn finalize_aggregation(
569+
fn finalize_aggregation(
570570
intermediate_aggregation_result: Option<Vec<u8>>,
571571
aggregations: Option<QuickwitAggregations>,
572572
searcher_context: &SearcherContext,

0 commit comments

Comments
 (0)