1

症状:

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

搜索包含在同一字段中的另一个词(即“开”)也可以

同时搜索“Snap On”会返回 0 个结果,即使它不应该这样做。

设置:

具有高级功能的 SQL Server 2008 R2

nopCommerce 3.0

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

我在执行搜索的存储过程中添加了一点以通过 MetaKeywords 进行搜索

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

有问题的存储过程太大而无法在此处完整发布,但基本上它会在关键字搜索之间动态添加“OR”或“AND”以生成包含子句中使用的短语。它使用包含通过几个联合来选择各种可搜索的字段。

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

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 '

@Keywords,此时,如果我正确阅读了该过程,则其值为:"Snap* AND On*"

我不明白为什么我的“Snap On”查询返回 0 个结果,但“Snap”和“On”分别工作正常。

最小搜索长度设置为 1,所以不是这样。

我应该添加搜索"Snap* OR On*"作品,但我不能使用 OR,因为搜索“Snap On”也会返回“Snap Dragon”和其他不相关的东西。

- 编辑 -

问题不在于这些。我在其他地方得到了一些建议,问题实际上是停止列表。<system>我只需将产品表上的停止列表从更改为 就设法解决了我的问题<off>

为此,请按照下列步骤操作。

  • 在 SQL Server 管理工作室中浏览到您的表
  • 右键单击表格并选择“全文索引”
  • 选择“全文索引”下的“属性”
  • 在“常规”选项卡中,将“全文索引停止列表”更改为<off>

我不得不这样做,因为我无法让事务 SQL 工作。它一直告诉我没有像我试图修改的表这样的对象。如果有人可以提供有关该Alter fulltext index语句如何工作的任何见解,我很感兴趣,因为我按照 MSDN 页面上的示例到 T 并且它一直告诉我没有名为 Product 的这样的对象。

4

1 回答 1

0

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

SQL 包含问题

在您的情况下,必须单独引用每个搜索词。请参阅文档http://technet.microsoft.com/en-us/library/ms187787(v=sql.90).aspx中的此示例

SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, '"chain*" OR "full*"');
于 2013-06-03T17:36:57.450 回答