0
点赞
收藏
分享

微信扫一扫

【每周一库】 simsearch - a simple and lightweight fuzzy search engine

本期的每周一库带来的是simsearch,一个运行在内存的轻量级字符串模糊搜索引擎。

首先列出库的链接

  • github: simsearch
  • docs.rs: simsearch

接下来我们通过simsearch gihub中给出的例子来试用

开发环境

  • ​rustc --version​​: rustc 1.45.2 (d3fb005a3 2020-07-31)
  • ​cargo --version​​: cargo 1.45.1 (f242df6ed 2020-07-22)

首先在​​Cargo.toml​​文件中添加依赖项

simsearch = "0.2"

从官网的介绍我们可以知道,simsearch默认使用了Jaro-Winkler similarity算法,该算法是在Jaro distance进一步改进的算法。它的基本原理是根据公式:

【每周一库】 simsearch - a simple and lightweight fuzzy search engine_字符串

计算字符串的相似度,其中的计算公式为

【每周一库】 simsearch - a simple and lightweight fuzzy search engine_搜索_02

其中​​s1​​​和​​s2​​表示字符串的长度,m表示两字符串的匹配字符数,t表示换位数目transposition的二分之一。

了解了基本概念之后我们通过代码来演示simsearch的功能

我们参考官方例子,想要从三个给出的字符串中找到模糊符合我们搜索pattern的index,适当修改官方例子代码如下:

use simsearch::SimSearch;
use std::time::Instant;

fn main(){
let mut engine: SimSearch<u32> = SimSearch::new();

engine.insert(1, "Things Fall Apart");
engine.insert(2, "The Old Man and the Sea");
engine.insert(3, "James Joyce has somethings");

let pattern = "thngs";

let start = Instant::now();
let res = engine.search(&pattern);
let end = Instant::now();

println!("pattern: {:?}", pattern.trim());
println!("results: {:?}", res);
println!("time: {:?}", end - start);
}

运行结果如下

【每周一库】 simsearch - a simple and lightweight fuzzy search engine_搜索_03

接下来我们调整插入的第三个字符串为​​James Joyce has some things​​​,期望是能够通过搜索pattern​​thngs​​找到第一个字符串和第三个字符串,运行结果如下:

【每周一库】 simsearch - a simple and lightweight fuzzy search engine_jar_04

以上就是本期的每周一库



举报

相关推荐

0 条评论