全文搜索URL字段sql server

Wor*_*ter 9 sql t-sql sql-server full-text-search

目标:返回以.开头的所有网址 "https://mywebsite.domain.com/as/product/4/"

鉴于:

  • 在URL字段上应用全文搜索.
  • SQL Server版:2014.
  • 超过200万行

网址

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)

任何帮助将不胜感激.

Had*_*adi 5

您可以使用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\engHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceRoot>\MSSearch\Language\enu
  • 清晰的WBreakerClass值.

Sql server考虑https://mywebsite.domain.com/as/product/4为一个单词.

注意:在我假设您使用英语作为断字符的情况下我已经采取了这两条路径.

在此MSDN主题中阅读有关Word Breaker的更多信息

  • 正如[MtwStark](http://stackoverflow.com/users/4523896/mtwstark)对[Rafael](http://stackoverflow.com/users/7158441/rafael)的回答发表评论,我们应该在之前添加一个斜杠. %`或者它也会发现44,4xyx ...... OP需要`.../4 /%` (3认同)