使用带有通配符的表值参数?

时间:2013-04-23 21:31:42

标签: sql vb.net search search-engine table-valued-parameters

场景......

我正在开发一个 ASP.net Visual Basic 的网站,该网站显示用户生成的产品列表(以下简称“帖子”)。在这个网站上,我有一个搜索框,允许用户更容易找到他的帖子。搜索框旨在允许用户输入特定的关键字,希望能够提供更加个性化的搜索。例如:

Example search box

在上面的示例中,用户已指定他要搜索具有匹配名称“John Smith”以及且标签为“Crime”和“Suspense”的书籍。

步骤:

  1. 我的SearchBoxManager类检索这些键名(作者, 标签)和关键值(John Smith,Crime,Suspense)。
  2. 我使用那些寻找完全匹配的参数运行SQL查询。
  3. 我从键值中提取每个单词,以便我可以单独搜索它们。
  4. 这是我遇到问题的地方。我使用那些寻找非精确匹配的参数运行SQL查询(例如,'%John%','%Smith%')。此步骤是基于相关性创建结果系统。这是我的第一个相关性算法,所以我可能会采用错误的方式。

  5. 问题......

    为了使第三步正常工作,我想将每个从键值中分离的单词组放入一个表值参数,然后在通配符包围的SqlCommandText中使用该表值参数%”。

    换句话说,因为每个键值中的单词数量可能每次都会改变,所以我需要将它们放在某种表值参数中。我也认为我可以将它们串联在一起并直接在查询字符串中使用它们,但我在中途停止,因为它变得有点混乱。


    问题......

    • 我可以将通配符与表值参数一起使用,如果是这样,怎么办?

    此外,如果你们中的任何人已经为本地搜索框开发了相关性排名算法或知道了一个,那么如果你能指出我正确的方向,我将不胜感激。

    提前谢谢。

1 个答案:

答案 0 :(得分:1)

所以一些样本数据

create table authors ( id int, name varchar(200) )
insert into authors values (1, 'John Smith')
insert into authors values (2, 'Jack Jones')
insert into authors values (3, 'Charles Johnston')

如果您想使用表格var我们可以制作一个并填充几个搜索词

declare @t table(word varchar(10) )
insert into @t select 'smith' union select 'jones' 

现在我们可以选择使用通配符

select authors.* from authors, @t words 
where authors.name like '%'+words.word+'%'