【问题标题】:Using table valued parameters with wildcards?使用带有通配符的表值参数?
【发布时间】:2013-04-23 21:31:42
【问题描述】:

场景...

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

在上面的示例中,用户指定他想搜索作者与姓名“John Smith”匹配的书籍以及带有“犯罪”和“悬念”标签的书籍。

步骤:

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

问题...

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

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


问题...

  • 我可以在表值参数中使用通配符吗?如果可以,如何使用?

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

提前谢谢你。

【问题讨论】:

  • 事实证明,具有相关性排名的全文搜索是一个常见但高级的数据挖掘软件工程问题 (imo)。最好的选择可能不是自己推出,而是让现有的全文搜索 API 适应您的数据集(如果它很大)。互联网上有大量关于全文搜索的一般信息(维基百科),但如果您正在寻找一个开源、功能齐全的 API 库,只需看看 Apache Software Foundation 及其 Lucene API 或 SOLR围绕 Lucene 构建的引擎(听起来您可能需要 SOLR)。

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


【解决方案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+'%'

【讨论】:

  • 好的太好了,我会试一试,如果它有效,请将其标记为正确!非常感谢,先生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-24
  • 2023-03-03
  • 1970-01-01
相关资源
最近更新 更多