【问题标题】:How to search many fields and against many values in sql database如何在sql数据库中搜索多个字段和多个值
【发布时间】: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


【解决方案1】:

对返回匹配值的mysql试试这个

where text RLIKE '(many)|(key)|(words)'

where text RLIKE '[many]|[key]|[words]'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-20
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多