Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用带有通配符的表值参数? 场景。。。_Sql_Vb.net_Search_Search Engine_Table Valued Parameters - Fatal编程技术网

Sql 使用带有通配符的表值参数? 场景。。。

Sql 使用带有通配符的表值参数? 场景。。。,sql,vb.net,search,search-engine,table-valued-parameters,Sql,Vb.net,Search,Search Engine,Table Valued Parameters,我正在ASP.net和visualbasic中开发一个网站,显示用户生成的产品列表(以下称为“帖子”)。在这个网站上,我有一个搜索框,允许用户更容易地找到他的文章。搜索框的设计允许用户输入特定的关键字,这将有望提供更定制的搜索。例如: 在上面的示例中,用户指定他希望搜索与作者姓名“John Smith”以及标签“Crime”和“Suspent”匹配的书籍 步骤: 我的SearchBoxManager类检索这些键名(作者, 标签)和关键值(约翰·史密斯、犯罪、悬念) 我使用这些参数运行SQL查询

我正在ASP.netvisualbasic中开发一个网站,显示用户生成的产品列表(以下称为“帖子”)。在这个网站上,我有一个搜索框,允许用户更容易地找到他的文章。搜索框的设计允许用户输入特定的关键字,这将有望提供更定制的搜索。例如:

在上面的示例中,用户指定他希望搜索与作者姓名“John Smith”以及标签“Crime”和“Suspent”匹配的书籍

步骤:

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

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

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


    问题是。。。
    • 我可以对表值参数使用通配符吗?如果可以,如何使用
    此外,如果你们中的任何一位已经为本地搜索框开发了一个关联性排序算法,或者知道一个,如果你们能为我指出正确的方向,我将不胜感激

    提前谢谢你。

    那么一些示例数据

    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')
    
    如果您想使用一个表变量,我们可以创建一个表变量,并用几个搜索词填充它

    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+'%'
    
    所以一些样本数据

    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')
    
    如果您想使用一个表变量,我们可以创建一个表变量,并用几个搜索词填充它

    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+'%'
    

    好的,太好了,我来试一试,如果成功的话,我会把它标记为正确的!非常感谢,先生。好的,太好了,我会试一试,如果成功的话,我会把它标记正确!非常感谢,先生。事实证明,全文搜索和相关性排序是一个常见但高级的数据挖掘软件工程问题(imo)。最好的选择可能不是自行开发,而是将现有的全文搜索API适应您的数据集(如果数据集很大的话)。因特网上的全文搜索有相当多的一般信息,但是如果你在寻找一个开源的话,那么全功能的API库就不比Apache软件基金会及其Lucene API,或者围绕Lucene构建的SOLR引擎(听起来像你可能需要SOLR)。事实证明,这是一个常见但高级的数据挖掘软件工程问题(imo)。最好的选择可能不是自行开发,而是将现有的全文搜索API适应您的数据集(如果数据集很大的话)。在因特网上搜索全文信息有相当数量的信息,但是如果你正在寻找一个开源的话,全功能的API库就不比Apache软件基金会及其Lucene API,或者围绕Lucene构建的SOLR引擎(听起来像你可能需要SOLR)。