我试图运行一个选择行的strored过程(来自全文索引列-sql-azure v12),其中单词包含搜索词的一小部分。例如,如果用户键入" natio"在搜索字符串中,我想返回包含" international"的所有行。我认为我应该在搜索字符串之前和之后使用前缀*,但这不起作用。这是我到目前为止所尝试的内容。
SET @searchString = '*' + @searchString +'*'
or SET @searchString = @searchString +'*'
or SET @searchString = '*' + @searchString
SELECT * FROM myTable where FREETEXT(sWords, @searchString )
or
SELECT * FROM myTable where CONTAINS(sWords, @searchString )
以上组合似乎都不起作用。只有输入整个单词(在本例中为国际单词)才有效。任何帮助都将受到赞赏。
修改
我从上面列出的问题链接得到了半个答案:
SELECT *
FROM product
WHERE CONTAINS(name,'"*1340*"');
我为变量使用了相同的逻辑:
SET @searchString ='"*' + @searchString + '*"';
它解决了我想要完成的一半。如果我进入" inter"在搜索字符串中,我会得到所有以inter开头的单词,例如international。但是,如果我进入国家",那么我就不会得到#34;国际"。
我想我还需要深入挖掘才能找到完整的解决方案......
答案 0 :(得分:1)
不幸的是,全文搜索仅支持前缀通配符:CONTAINS(<>,'“book *”'),这与Sql Server内部行为相同。您可以在此处找到有关如何解决此限制的一些建议: Full text catalog/index search for %book%
答案 1 :(得分:0)
您可以尝试使用LIKE
SELECT * FROM myTable where sWords like '%'+@searchString+'%';