我有一个从另一台服务器复制的 MySQL 数据库。数据库包含一个包含这些列的表
ID、文件名和文件大小
表中有超过 4'000'000 条记录。我想在 FileName (varchar) 列中快速搜索
我发现我可以使用这个 Sphinx 搜索引擎。问题是我想按文件类型限制搜索。我是否必须以及如何(触发器?)为所有行提取文件扩展名?可能我必须创建另一个表(因为这个表是复制的)并以 1:1 的关系加入它们?
你能给我一些建议吗:)
我有一个从另一台服务器复制的 MySQL 数据库。数据库包含一个包含这些列的表
ID、文件名和文件大小
表中有超过 4'000'000 条记录。我想在 FileName (varchar) 列中快速搜索
我发现我可以使用这个 Sphinx 搜索引擎。问题是我想按文件类型限制搜索。我是否必须以及如何(触发器?)为所有行提取文件扩展名?可能我必须创建另一个表(因为这个表是复制的)并以 1:1 的关系加入它们?
你能给我一些建议吗:)
您肯定希望将文件类型分隔到单独的列中 - 这将允许您针对该术语进行 Sphinx 搜索(匹配模式设置为扩展):
normal query terms @filetype jpg
然而,这不是完全匹配——它仍然会使用 Sphinx 的智能来进行单词匹配等。这可能是您想要的,但如果您不这样做,我建议您规范化您的数据库并将文件类型放在另一个表中,并在您的文件表中使用外键。然后,您可以将此整数用作 Sphinx 设置中的属性,并使用特定文件类型的 id 对其进行过滤。这在 Sphinx 中会更快、更可靠,但需要做更多的工作。
为什么不使用带有正则表达式的 SQL 查询?
让它像...
.$query.\.$extension
这会将通配符匹配到文件名中的搜索词,然后是句点,然后是扩展名。