搜索算法
SearchMatch
是一个用于将文本与模式匹配的接口。匹配结果位于返回值 SearchMatchResult
中。匹配结果包含匹配位置信息和总匹配分数。
fzf.
实现
FuzzyMatchV2Search
移植自 fzf FuzzyMatchV2Search 算法。执行快速模糊搜索,非常适用于快速查找路径。
ExactMatchNaive
移植自 fzf ExactMatchNaive 算法。简单的精确匹配,如果您知道要搜索的内容,它会更准确。
SearchMatch
算法和默认语法隐藏在包保护类中,因为在确定 API 能够获得长期支持之前,我们不希望完全公开它们。您需要通过其内置的构建器来构造 SearchMatch
。
SearchMatch searchMatch = SearchMatch.builder()
.caseSensitive(false)
.normalize(false)
.forward(true)
.build();
可以配置区分大小写、搜索发生的方向或搜索前是否应将文本标准化。当不同语言中同类字符有细微变化时,标准化会很有用。
搜索算法是根据下表所示的搜索语法选择的。
标记 | 匹配类型 | 描述 |
---|---|---|
|
模糊匹配 |
匹配 |
|
精确匹配 |
包含 |
示例
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