core icon indicating copy to clipboard operation
core copied to clipboard

[BUG] 文件搜索结果没有命中具体文件

Open eedpublic opened this issue 11 months ago • 1 comments

描述你的问题(Describe the bug)

问题

在小文件数工程下搜索效果正常,但是在大文件数(>10000)项目下搜索精度会出现问题,严重情况下搜索出的结果完全不相干

极端情况

在极端情况下,exactMatches+fuzzyMatches完全命中前面200条数据,后面的文件完全搜索不到

短字符匹配

比如要搜索gradlew,输出结果会出现如下情况。以下在vscode不会出现问题

g 输出不相干 gr 输出不相干 gra 输出不相干 grad 输出不相干 gradl 输出不相干 gradle 包含需要的文件 gradlew 精准匹配

复现路径(To Reproduce)

1. codefuse文件搜索处理逻辑

1.1. 后端处理逻辑

image

获取文件夹对应的文件名称数组 匹配文件 精准匹配exactMatches 模糊匹配fuzzyMatches exactMatches+fuzzyMatches=DEFAULT_FILE_SEARCH_LIMIT(200条)则中断匹配 返回匹配的200条数据

1.2. 前端处理逻辑

image image

调用后端fileSearchService.find接口 返回DEFAULT_FILE_SEARCH_LIMIT 200条数据 前端进行排序,然后展示

2. vs code文件搜索逻辑

vs code的文件搜索逻辑如下:

判断搜索条件是否命中缓存 命中缓存则直接从缓存获取返回 如果没有命中缓存则走正常的文件搜索逻辑

2.1. 从缓存返回

使用trySortedSearchFromCache判断缓存是否命中,命中后从缓存中获取并使用sortResults方法进行排序,再将结果返回

image image

2.2. 非缓存返回

trySortedSearchFromCache中没有命中,则使用doSortedSearch进行正常文件搜索,doSortedSearch的搜索逻辑如下:

使用rg工具进行文件集合获取 将搜索结果放入cache缓存 再使用sortResults将结果进行排序 返回排序结果

image image

image

3. 搜索结果对比

下面通过打开相同文件夹code,对比codefuse和vs code对gradlew关键字进行检索。

通过对比,可以看到codefuse的检索结果没有达到一个很好的效果。

3.1. codefuse搜索gradlew

image image image image image

3.2. vs code搜索gradlew

image image image image

预期表现(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]

eedpublic avatar Nov 14 '24 02:11 eedpublic