给定以下文件路径,存储在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多个字符。
答案 0 :(得分:1)
你做不到。通配符搜索不会使用索引 如果索引文件路径,则只能最好地支持
等查询/static/images/%
根据您的情况,如果您想允许通配符搜索, 您最好的选择是将目录分解为多个关键字:
static
images
revolver
.png
然后将每个关键字存储到关键字表中,
并建立关系。
当您执行通配符搜索时,实际上是搜索关键字表。
答案 1 :(得分: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.
读取原始文件名需要一些工作,除非你也存储它。