core
core copied to clipboard
[BUG] 文件搜索结果没有命中具体文件
描述你的问题(Describe the bug)
问题
在小文件数工程下搜索效果正常,但是在大文件数(>10000)项目下搜索精度会出现问题,严重情况下搜索出的结果完全不相干
极端情况
在极端情况下,exactMatches+fuzzyMatches完全命中前面200条数据,后面的文件完全搜索不到
短字符匹配
比如要搜索gradlew,输出结果会出现如下情况。以下在vscode不会出现问题
g 输出不相干 gr 输出不相干 gra 输出不相干 grad 输出不相干 gradl 输出不相干 gradle 包含需要的文件 gradlew 精准匹配
复现路径(To Reproduce)
1. codefuse文件搜索处理逻辑
1.1. 后端处理逻辑
获取文件夹对应的文件名称数组 匹配文件 精准匹配exactMatches 模糊匹配fuzzyMatches exactMatches+fuzzyMatches=DEFAULT_FILE_SEARCH_LIMIT(200条)则中断匹配 返回匹配的200条数据
1.2. 前端处理逻辑
调用后端fileSearchService.find接口 返回DEFAULT_FILE_SEARCH_LIMIT 200条数据 前端进行排序,然后展示
2. vs code文件搜索逻辑
vs code的文件搜索逻辑如下:
判断搜索条件是否命中缓存 命中缓存则直接从缓存获取返回 如果没有命中缓存则走正常的文件搜索逻辑
2.1. 从缓存返回
使用trySortedSearchFromCache判断缓存是否命中,命中后从缓存中获取并使用sortResults方法进行排序,再将结果返回
2.2. 非缓存返回
trySortedSearchFromCache中没有命中,则使用doSortedSearch进行正常文件搜索,doSortedSearch的搜索逻辑如下:
使用rg工具进行文件集合获取 将搜索结果放入cache缓存 再使用sortResults将结果进行排序 返回排序结果
3. 搜索结果对比
下面通过打开相同文件夹code,对比codefuse和vs code对gradlew关键字进行检索。
通过对比,可以看到codefuse的检索结果没有达到一个很好的效果。
3.1. codefuse搜索gradlew
3.2. vs code搜索gradlew
预期表现(Expected behavior)
环境信息(Environment)
- OS: [e.g. macOS 11.2 Apple M1/Windows10/Windows11]
- Browser: [e.g. chrome, safari, electron]
- OpenSumi Version: [e.g. 2.13.0]