0

给定以下文件路径,存储在 mysql 数据库中:

.//.git/refs/remotes/origin/HEAD
.//.git/refs/tags
.//__init__.py
.//__init__.pyc
.//forms.py
.//forms.pyc
.//models.py
.//models.pyc
.//settings.py
.//settings.pyc
.//static
.//static/css
.//static/css/all.css
.//static/images
.//static/images/bg.png
.//static/images/favicon.ico
.//static/images/pds-header-logo.png
.//static/images/pds-logo.png
.//static/images/revolver.png
.//static/js
.//static/js/all.js
.//templates
.//templates/base.html
.//templates/default.html
.//templates/overview.html
.//urls.py
.//urls.pyc
.//views.py
.//views.pyc
.//wsgi.py
.//wsgi.pyc

需要有人能够搜索路径。例如,如果用户搜索“static”,它将返回路径中带有“static”的结果:

.//static
.//static/css
.//static/css/all.css
.//static/images
.//static/images/bg.png
.//static/images/favicon.ico
.//static/images/pds-header-logo.png
.//static/images/pds-logo.png
.//static/images/revolver.png
.//static/js
.//static/js/all.js

我目前的搜索类似于:

`SELECT path FROM files WHERE path LIKE '%search%';`

有没有办法索引这个列/改进这个搜索(删除 LIKE %%),因为我在这个系统上可能有 1M+ 文件路径。请注意,文件路径可能超过 200 个字符。

4

2 回答 2

1

你不能。通配符搜索不会使用索引。
如果您索引文件路径,则只能最好地支持查询,例如

/static/images/%

鉴于您的情况,如果您想允许通配符搜索,
最好的办法是将目录分解为多个关键字:

static
images
revolver
.png

然后将每个关键字存储到关键字表中,
并建立关系。

当您执行通配符搜索时,实际上是搜索关键字表。

于 2013-01-24T18:10:12.637 回答
1

我猜你实际上可以有一个“部分名称的索引”。像这样的东西:

id ! name    ! parent
---------------------
1  ! static  ! 0           // at root. 
2  ! css     ! 1           // Parent is "static"
3  ! all.css ! 2           // parent is css
4  ! images  ! 1           // parent is static
5  ! bg.png  ! 4           // images. 

读取原始文件名需要一些工作,除非您也存储它。

于 2013-01-24T18:10:45.757 回答