搜索算法
SearchMatch
是一个用于将文本与模式匹配的接口。匹配结果以 SearchMatchResult
返回值的形式提供。匹配结果包含有关匹配位置和整体得分的信息。
fzf.
实现
FuzzyMatchV2Search
fzf FuzzyMatchV2Search 算法的移植。能够快速进行模糊搜索,适用于快速查找路径。
ExactMatchNaive
fzf ExactMatchNaive 算法的移植。如果你知道要搜索的内容,简单的精确匹配会更准确。
SearchMatch
算法和默认语法隐藏在包保护的类中,因为我们不希望在确定API可以长期支持之前完全开放这些内容。你需要通过其内置的构建器来构造 SearchMatch
。
SearchMatch searchMatch = SearchMatch.builder()
.caseSensitive(false)
.normalize(false)
.forward(true)
.build();
可以配置大小写敏感性、搜索发生的方向,或者在搜索前是否应该对文本进行规范化。当不同语言对同一类型的字符有细微差异时,规范化非常有用。
搜索算法是根据下表所示的搜索语法选择的。
表 1. 搜索语法
Token | 匹配类型 | 说明 |
---|---|---|
hell | 模糊匹配 | 匹配 hello 的项目 |
'stuff | 精确匹配 | 包含 stuff 的项目 |
示例
SearchMatch searchMatch = SearchMatch.builder()
.caseSensitive(false)
.normalize(false)
.forward(true)
.build();
SearchMatchResult result = searchMatch.match("foo bar baz", "fbb");
result.getStart();
// 0 - start position inclusive
result.getEnd();
// 9 - end position exclusive
result.getPositions();
// 0,4,8 - positions, inclusive
result.getScore();
// 112 - score
result.getAlgorithm();
// FuzzyMatchV2SearchMatchAlgorithm - resolved algo