1pub mod bm25;
2#[cfg(feature = "dense")]
3pub mod dense;
4#[cfg(any(feature = "dense", feature = "openai"))]
5pub mod embedding;
6#[cfg(feature = "dense")]
7pub mod hybrid;
8#[cfg(feature = "openai")]
9pub mod openai_embedder;
10pub mod query;
11pub mod ranking;
12
13use crate::chunk::{ChunkType, CodeChunk};
14use serde::{Deserialize, Serialize};
15
16#[derive(Debug, Clone, Serialize, Deserialize)]
18pub struct SearchResult {
19 pub chunk_id: String,
20 pub score: f32,
21 pub content: String,
22 pub file_path: String,
23 pub relative_path: String,
24 pub folder_structure: Vec<String>,
25 pub chunk_type: ChunkType,
26 pub name: Option<String>,
27 pub parent_name: Option<String>,
28 pub start_line: usize,
29 pub end_line: usize,
30 pub language: String,
31 pub docstring: Option<String>,
32 pub tags: Vec<String>,
33}
34
35impl SearchResult {
36 pub fn from_chunk(chunk: &CodeChunk, score: f32) -> Self {
37 Self {
38 chunk_id: chunk.id.clone(),
39 score,
40 content: chunk.content.clone(),
41 file_path: chunk.file_path.clone(),
42 relative_path: chunk.relative_path.clone(),
43 folder_structure: chunk.folder_structure.clone(),
44 chunk_type: chunk.chunk_type.clone(),
45 name: chunk.name.clone(),
46 parent_name: chunk.parent_name.clone(),
47 start_line: chunk.start_line,
48 end_line: chunk.end_line,
49 language: chunk.language.clone(),
50 docstring: chunk.docstring.clone(),
51 tags: chunk.tags.clone(),
52 }
53 }
54}