搜索算法

SearchMatch 是一个用于将文本模式匹配的接口。匹配结果位于返回值 SearchMatchResult 中。匹配结果包含匹配位置信息和总匹配分数。

fzf.

实现

FuzzyMatchV2Search

移植自 fzf FuzzyMatchV2Search 算法。执行快速模糊搜索,非常适用于快速查找路径。

ExactMatchNaive

移植自 fzf ExactMatchNaive 算法。简单的精确匹配,如果您知道要搜索的内容,它会更准确。

SearchMatch

算法和默认语法隐藏在包保护类中,因为在确定 API 能够获得长期支持之前,我们不希望完全公开它们。您需要通过其内置的构建器来构造 SearchMatch

SearchMatch searchMatch = SearchMatch.builder()
	.caseSensitive(false)
	.normalize(false)
	.forward(true)
	.build();

可以配置区分大小写、搜索发生的方向或搜索前是否应将文本标准化。当不同语言中同类字符有细微变化时,标准化会很有用。

搜索算法是根据下表所示的搜索语法选择的。

表 1. 搜索语法
标记 匹配类型 描述

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