sonic/executor/
suggest.rs1use crate::lexer::TokenLexer;
9use crate::query::{QuerySearchID, QuerySearchLimit};
10use crate::store::StoreItem;
11use crate::store::fst::StoreFSTActionBuilder;
12
13impl super::Executor {
14 pub fn suggest(
15 &self,
16 item: StoreItem,
17 _event_id: QuerySearchID,
18 mut lexer: TokenLexer,
19 limit: QuerySearchLimit,
20 ) -> Result<Option<Vec<String>>, ()> {
21 if let StoreItem(collection, Some(bucket), None) = item {
22 let _fst_read_guard = self.fst_pool.lock_read_access();
25
26 if let Ok(fst_store) = self.fst_pool.acquire(collection, bucket) {
27 let fst_action = StoreFSTActionBuilder::access(fst_store);
28
29 if let (Some(word), None) = (lexer.next(), lexer.next()) {
30 tracing::debug!("running suggest on word: {}", word.0);
31
32 return Ok(fst_action.suggest_words(&word.0, limit as usize, None));
33 }
34 }
35 }
36
37 Err(())
38 }
39}