mirror of
https://github.com/meilisearch/meilisearch.git
synced 2024-11-25 19:45:05 +08:00
Prefer using Rc<str> than String when cloning a lot
This commit is contained in:
parent
1a0e962299
commit
f4ab1f168e
@ -1,4 +1,5 @@
|
|||||||
use std::collections::{HashMap, VecDeque};
|
use std::collections::{HashMap, VecDeque};
|
||||||
|
use std::rc::Rc;
|
||||||
|
|
||||||
use heed::RoTxn;
|
use heed::RoTxn;
|
||||||
use itertools::merge_join_by;
|
use itertools::merge_join_by;
|
||||||
@ -38,7 +39,7 @@ impl SearchableExtractor for WordPairProximityDocidsExtractor {
|
|||||||
let mut key_buffer = Vec::new();
|
let mut key_buffer = Vec::new();
|
||||||
let mut del_word_pair_proximity = Vec::new();
|
let mut del_word_pair_proximity = Vec::new();
|
||||||
let mut add_word_pair_proximity = Vec::new();
|
let mut add_word_pair_proximity = Vec::new();
|
||||||
let mut word_positions: VecDeque<(String, u16)> =
|
let mut word_positions: VecDeque<(Rc<str>, u16)> =
|
||||||
VecDeque::with_capacity(MAX_DISTANCE as usize);
|
VecDeque::with_capacity(MAX_DISTANCE as usize);
|
||||||
|
|
||||||
let docid = document_change.docid();
|
let docid = document_change.docid();
|
||||||
@ -118,8 +119,8 @@ fn build_key<'a>(prox: u8, w1: &str, w2: &str, key_buffer: &'a mut Vec<u8>) -> &
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn word_positions_into_word_pair_proximity(
|
fn word_positions_into_word_pair_proximity(
|
||||||
word_positions: &mut VecDeque<(String, u16)>,
|
word_positions: &mut VecDeque<(Rc<str>, u16)>,
|
||||||
word_pair_proximity: &mut impl FnMut((String, String), u8),
|
word_pair_proximity: &mut impl FnMut((Rc<str>, Rc<str>), u8),
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let (head_word, head_position) = word_positions.pop_front().unwrap();
|
let (head_word, head_position) = word_positions.pop_front().unwrap();
|
||||||
for (word, position) in word_positions.iter() {
|
for (word, position) in word_positions.iter() {
|
||||||
@ -135,8 +136,8 @@ fn process_document_tokens(
|
|||||||
document: &KvReader<FieldId>,
|
document: &KvReader<FieldId>,
|
||||||
document_tokenizer: &DocumentTokenizer,
|
document_tokenizer: &DocumentTokenizer,
|
||||||
fields_ids_map: &mut GlobalFieldsIdsMap,
|
fields_ids_map: &mut GlobalFieldsIdsMap,
|
||||||
word_positions: &mut VecDeque<(String, u16)>,
|
word_positions: &mut VecDeque<(Rc<str>, u16)>,
|
||||||
word_pair_proximity: &mut impl FnMut((String, String), u8),
|
word_pair_proximity: &mut impl FnMut((Rc<str>, Rc<str>), u8),
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let mut token_fn = |_fname: &str, _fid: FieldId, pos: u16, word: &str| {
|
let mut token_fn = |_fname: &str, _fid: FieldId, pos: u16, word: &str| {
|
||||||
// drain the proximity window until the head word is considered close to the word we are inserting.
|
// drain the proximity window until the head word is considered close to the word we are inserting.
|
||||||
@ -148,7 +149,7 @@ fn process_document_tokens(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// insert the new word.
|
// insert the new word.
|
||||||
word_positions.push_back((word.to_string(), pos));
|
word_positions.push_back((Rc::from(word), pos));
|
||||||
Ok(())
|
Ok(())
|
||||||
};
|
};
|
||||||
document_tokenizer.tokenize_document(document, fields_ids_map, &mut token_fn)?;
|
document_tokenizer.tokenize_document(document, fields_ids_map, &mut token_fn)?;
|
||||||
|
Loading…
Reference in New Issue
Block a user