Wor*_*ter 9 sql t-sql sql-server full-text-search
目标:返回以.开头的所有网址 "https://mywebsite.domain.com/as/product/4/"
鉴于:
https://mywebsite.domain.com/as/product/1/production
https://mywebsite.domain.com/as/product/2/items
https://mywebsite.domain.com/as/product/1/affordability
https://mywebsite.domain.com/as/product/3/summary
https://mywebsite.domain.com/as/product/4/schedule
https://mywebsite.domain.com/as/product/4/resources/summary
Run Code Online (Sandbox Code Playgroud)
查询1:
WHERE CONTAINS (URL, 'https://mywebsite.domain.com/as/product/4')
Run Code Online (Sandbox Code Playgroud)
结果:
All records returned
Run Code Online (Sandbox Code Playgroud)
查询2(阅读MSDN文章后添加"*" )
WHERE CONTAINS (URL, '"https://mywebsite.domain.com/as/product/4*"')
Run Code Online (Sandbox Code Playgroud)
结果:
No records returned
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
您可以使用CONTAINS一个LIKE匹配仅仅是一个开始子查询:
SELECT *
FROM (
SELECT *
FROM myTable WHERE CONTAINS (URL, '"https://mywebsite.domain.com/as/product/4/"')
) AS S1
WHERE S1.URL LIKE 'https://mywebsite.domain.com/as/product/4/%'
Run Code Online (Sandbox Code Playgroud)
这样,SLOW LIKE运算符查询将针对较小的记录集运行
EDIT1 :(如果WHERE CONTAINS (URL, '"https://mywebsite.domain.com/as/product/4/"')没有过滤值)
经过大量的搜索.问题在于/.正斜杠不包含在Noise Words文件中,但我猜它被归类为分隔符或Word断路器,因此无法搜索.
阅读以下主题:
EDIT2:
我找到了一个建议的解决方案
/ 被视为英语断字您可以从注册表中更改它
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceRoot>\MSSearch\Language\eng
和
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceRoot>\MSSearch\Language\enuSql server考虑https://mywebsite.domain.com/as/product/4为一个单词.
注意:在我假设您使用英语作为断字符的情况下我已经采取了这两条路径.
在此MSDN主题中阅读有关Word Breaker的更多信息