如何在sql数据库中搜索许多字段和许多值

时间:2015-08-15 04:22:34

标签: php mysql sql sql-server search

我正在编写一个带搜索功能的Web应用程序。我正在搜索“资产”列表。

资产具有名称和描述。它还有一个与之关联的标签列表。

我的架构如下所示:

Schema 我的输入看起来像这样:“很多关键词”

我的问题是搜索资产的最佳方法是什么。还要记住,将来可能会有更多的字段需要搜索。

我的想法如下:

创意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上的文本字段,这样它就是我要搜索的所有内容的串联。所以我的桌子看起来像:

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
)

还是有更好的方法吗?第三方索引服务?

0 个答案:

没有答案