File size: 1,323 Bytes
cf57c77
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use redis::{self, RedisResult};

pub fn ensure_redisearch_index(
    redis: &redis::Client,
    vector_dimensions: usize,
    distance_metric: &str,
) -> RedisResult<()> {
    let mut con = redis.get_connection()?;
    let index_name = "motorhead";

    let index_info: Result<redis::Value, _> = redis::cmd("FT.INFO").arg(index_name).query(&mut con);

    if let Err(err) = index_info {
        if err.to_string().contains("Unknown: Index name") {
            redis::cmd("FT.CREATE")
                .arg(index_name)
                .arg("ON")
                .arg("HASH")
                .arg("PREFIX")
                .arg("1")
                .arg("motorhead:")
                .arg("SCHEMA")
                .arg("session")
                .arg("TEXT")
                .arg("content")
                .arg("TEXT")
                .arg("role")
                .arg("TEXT")
                .arg("vector")
                .arg("VECTOR")
                .arg("HNSW")
                .arg("6")
                .arg("TYPE")
                .arg("FLOAT32")
                .arg("DIM")
                .arg(vector_dimensions.to_string())
                .arg("DISTANCE_METRIC")
                .arg(distance_metric)
                .query(&mut con)?;
        } else {
            return Err(err);
        }
    }

    Ok(())
}