我正在编写一个带搜索功能的Web应用程序。我正在搜索“资产”列表。
资产具有名称和描述。它还有一个与之关联的标签列表。
我的架构如下所示:
我的问题是搜索资产的最佳方法是什么。还要记住,将来可能会有更多的字段需要搜索。
我的想法如下:
创意1:
程序性地创建一个大型查询,如:
select *
from asset
where id in (
select asset_id
from asset_tag
where tag_id in (
select id
from tags
where name in (
'many', 'key', 'words'
)
)
) or (concat(name, description) like '%many%'
or concat(name, description) like '%key%'
or concat(name, description) like '%words%')
这不是特别好,因为我可能需要添加更多字段来搜索字段,并且我感觉当数据库开始变得有些大小时根本无法工作。
创意2:
创建某种索引系统。在那里我创建另一个名为'asset_index'的表,其中包含两列。 Asset_id和文本。当资产得到更新或添加标签时,我计算asset_index上的文本字段,这样它就是我要搜索的所有内容的串联。所以我的桌子看起来像:
所以我的查询会是这样的:
select *
from asset
where id in (
select asset_id
from asset_index
where match(text) against('many key words')
-- or text like '%many%' or text like '%key%' or text like '%words%' depending up if I can get the database to support full text searches
)
还是有更好的方法吗?第三方索引服务?