Stored procedures 搜索多个单词时,SQL Server全文搜索失败

Stored procedures 搜索多个单词时,SQL Server全文搜索失败,stored-procedures,sql-server-2008-r2,nopcommerce,Stored Procedures,Sql Server 2008 R2,Nopcommerce,症状: 搜索单个单词(即“Snap”)有效 搜索同一字段中包含的另一个单词(即“On”)也有效 同时搜索“Snap-On”将返回0个结果,即使它不应该返回 设置: 具有高级功能的SQL Server 2008 R2 nopCommerce 3.0 我做过的事情: 我将Product.MetaKeywords列添加到全文搜索目录中 我在存储过程中添加了一点,该存储过程通过元关键字执行搜索 现在nopCommerce板速度相当慢,但我肯定问题出在SQL存储过程中,所以我想我会在这里寻求SQL Ser

症状:

搜索单个单词(即“Snap”)有效

搜索同一字段中包含的另一个单词(即“On”)也有效

同时搜索“Snap-On”将返回0个结果,即使它不应该返回

设置:

具有高级功能的SQL Server 2008 R2

nopCommerce 3.0

我做过的事情: 我将Product.MetaKeywords列添加到全文搜索目录中

我在存储过程中添加了一点,该存储过程通过元关键字执行搜索

现在nopCommerce板速度相当慢,但我肯定问题出在SQL存储过程中,所以我想我会在这里寻求SQL Server帮助,即使您不熟悉nopCommerce web应用程序,您可能有一些信息可以帮助我

所讨论的存储过程太大,无法在此处完全发布,但基本上它会在关键字搜索之间动态添加“或”或“和”,以生成Contains子句中使用的短语。它使用Contains通过几个联合选择各种可搜索字段

下面是我添加到存储过程中的位

SET @sql = @sql + '
UNION
SELECT p.Id
FROM Product p with (NOLOCK)
WHERE '
IF @UseFullTextSearch = 1
    SET @sql = @sql + 'CONTAINS(p.[MetaKeywords], @Keywords) '
ELSE
    SET @sql = @sql + 'PATINDEX(@Keywords, p.[MetaKeywords]) > 0 '
@此时,如果我正确阅读了过程,则关键字的值为:
“Snap*和On*”

我不明白为什么我对“Snap-On”的查询返回0个结果,但“Snap”和“On”各自工作正常

最小搜索长度设置为1,因此不是这样

我应该补充一点,搜索“Snap*或On*”是有效的,但我不能使用或,因为搜索“Snap-On”也会返回“Snap-Dragon”和其他不相关的内容

--编辑--

问题不在于这些。我在别处得到了一些建议,而问题实际上是禁止名单。我只需将产品表上的停止列表从
更改为
,就解决了我的问题

要执行此操作,请执行以下步骤

  • 在SQLServerManagementStudio中浏览到您的表
  • 右键单击表格并选择“全文索引”
  • 在“全文索引”下选择“属性”
  • 在“常规”选项卡中,将“全文索引停止列表”更改为

我不得不这样做,因为我无法让transact-SQL正常工作。它一直告诉我,没有我试图修改的表这样的对象。如果有人能提供任何关于
Alter fulltext index
语句如何工作的见解,我很感兴趣,因为我在MSDN页面上的示例中一直在T,它一直告诉我没有这样的对象命名为Product。

星号不是一个普通的旧通配符。如果您在搜索词末尾以外的任何地方使用它,则可能没有正确使用它。参见类似问题的答案

在您的情况下,每个搜索词必须单独引用。参见文档中的示例

你可以尝试“快照”或“on *”(引用每一个术语,因此或不被认为是你的搜索条件的标准)
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, '"chain*" OR "full*"');