这是一个较长的,所以请多多包涵:-)
我的情况是提前搜索我们的 Intranet 商店。当前的解决方案运行良好,但它的实现方式存在一些缺点。
我们使用 ASP.NET 和 SQL Server 2008 R2,搜索主要使用CONTAINSTABLE
. 我们遇到的问题是一些用户需要在描述中找到具有特定技术/物理细节的项目。搜索查询的一些示例是
SomeItem 1/2"
SomeotherItem 30°C
SomeThirdItem 3,8V
例如,我尝试使用第一个搜索词查找项目描述,这些项目看起来大多像这样
SomeItem 1/2"x3/8" additionalTextblabla
SomeVendor SomeItem 1/2"x3/8" additionalTextblabla
我正在使用 Irony 将搜索查询转换为CONTAINSTABLE
. 我什至支持搜索词前面的排除(带 -)和搜索词末尾的通配符之类的东西。
现在据我了解,在更新全文索引时,像 1/2" 这样的术语没有被索引,因此CONTAINSTABLE
在寻找它作为条件时找不到它。我也遇到了 "和 ' 在搜索中使用,因为它会导致 SQL 级别的语法错误,因此即使在搜索到达数据库之前我也必须丢弃它们。
示例:SomeItem 1/2" 当前已转换为搜索条件 ("SomeItem" AND "1/2") 并返回 0 结果,因为 FullTextIndex 将 / 计为标点符号,并且不索引我正在尝试的项目描述的那部分找到(至少据我所知)。
我该如何解决这个问题?可以这样做CONTAINSTABLE
还是我需要做一些完全不同的事情?我对我们的几个供应商自己的商店进行了搜索,这些查询似乎有 0 个问题。
当前的“解决方法”是,如果搜索没有返回结果,我会再次使用FREETEXTTABLE
而不是运行相同的搜索CONTAINSTABLE
,这主要是找到项目,但也有很多不相关的东西。
我们即将在 SQL Server 2014 上测试我们的代码,这对全文索引的工作方式有影响吗?
此致
-戴夫