1

情节...

我正在用ASP.netVisual Basic开发一个网站,显示用户生成的产品列表(以下称为“帖子”)。在这个站点中,我有一个搜索框,可以让用户更轻松地找到他的帖子。搜索框旨在允许用户输入特定的关键字,这有望提供更定制的搜索。例如:

示例搜索框

在上面的示例中,用户已指定他想搜索作者与名称“John Smith”匹配的书籍,以及标签“Crime”和“Suspense”的书籍。

脚步:

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

问题...

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

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


问题...

  • 我可以将通配符与表值参数一起使用吗?如果可以,如何使用?

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

先感谢您。

4

1 回答 1

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')

如果您想使用 table 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+'%'
于 2013-04-23T21:45:42.700 回答