【发布时间】:2015-08-15 04:22:33
【问题描述】:
我正在编写一个带有搜索功能的网络应用程序。我正在搜索“资产”列表。
资产具有名称和描述。它还有一个与之关联的标签列表。
我的架构如下所示:
我的问题是搜索资产的最佳方式是什么。还要记住,将来很可能会有更多的领域需要搜索。
我的想法如下:
想法 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 和文本。当资产更新或添加标签时,我会计算资产索引上的文本字段,因此它是我想要搜索的所有内容的串联。所以我的桌子看起来像:
所以我的查询是这样的:
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
)
或者有更好的方法吗?第三方索引服务?
【问题讨论】:
-
是mysql还是sql server?不能同时...
-
使用正则表达式将字符串匹配到mysql中
-
表的大小是多少?查询是否庞大并不重要,它应该表现良好。
-
您可以使用 FULLTEXT 索引在多个字段中搜索值。它还为您提供相关搜索。
-
我不明白问题所在,只是搜索资产。也许我遗漏了一些东西,在这种情况下,一个可复制的例子可能会有所帮助
标签: php mysql sql sql-server search