如何使用带有数值的TSQL FreeText搜索进行广泛匹配搜索?

如何使用带有数值的TSQL FreeText搜索进行广泛匹配搜索?,tsql,sql-server-2008,common-table-expression,full-text-search,Tsql,Sql Server 2008,Common Table Expression,Full Text Search,我正在尝试用“索尼型号np-fx110”或“索尼sz-vgn770N手提箱”或“华硕笔记本型号g60v”等术语进行免费文本搜索 我知道freetext将数字视为噪音,所以我想我会从noise SQL Server 2008 noiseENU.txt文件中编辑数字,但在我的服务器上找不到任何噪音文件 FTData目录只包含一堆2kb的xml文件和一个空的FilterData文件夹 我有一个split函数,它将返回给定字符串中的所有单词,并带有一个空格的拆分字符。我需要一个CTE,它将从SPLIT(

我正在尝试用“索尼型号np-fx110”或“索尼sz-vgn770N手提箱”或“华硕笔记本型号g60v”等术语进行免费文本搜索

我知道freetext将数字视为噪音,所以我想我会从noise SQL Server 2008 noiseENU.txt文件中编辑数字,但在我的服务器上找不到任何噪音文件

FTData目录只包含一堆2kb的xml文件和一个空的FilterData文件夹

我有一个split函数,它将返回给定字符串中的所有单词,并带有一个空格的拆分字符。我需要一个CTE,它将从SPLIT()函数返回的每个单词的和文本连接起来

> SELECT *  FROM MyTable WHERE
> Description LIKE '%asus%'  AND
> Description LIKE '%laptop%'  AND
> Description LIKE '%model%'  AND
> Description LIKE '%g60v%'
基本上,型号可以是“描述”字段中的任意位置。我可以很容易地做一个类似的[型号],但是我想将其与描述中包含的其他词相匹配

这似乎不是一个最佳方法,但可行。任何关于如何解决这一问题的其他建议都将不胜感激

谢谢

更新

以下是运行“exec sp\u帮助\u全文\u目录”的结果

更新

当型号只是一个数字时会出现问题,例如“iPhone4”中的“4”

我已经在动态构建一个包含查询,在每个术语之间插入和。然而,这里有一些问题:

> **WHERE CONTAINS(*, 'iphone AND 4 AND battery')** - returns 0 results
> **WHERE FREETEXT(*, 'iphone 4 battery')** - is matching for iphone
> OR battery which is sub-optimal
> **WHERE CONTAINS(*, '"iphone 4" AND "battery"')** - returns the most
> accurate result set
鉴于这些发现,我认为应该在表中维护这些“特殊情况”的列表,并基于此动态生成包含查询


关于这种方法有什么建议吗?

您是否尝试过使用全文索引

SQL在默认情况下将“1”或“2”视为噪波,这是正确的(您可以更改此项)。。。但它应该发现“g60v”或“sz-vgn770N”没有问题。我曾以类似的方式使用FTS搜索ISBN的图书目录,效果很好

最后,我可能在这一点上错了。。。但我认为,在实际构建/使用FTS之前,不会创建噪波文件

还要注意,搜索FTS与使用like语句不同。如果您不熟悉语法,可以使用联机图书搜索FTS

这样的查询应该适合您的需要:(我如何在图书目录搜索中使用FTS)


阅读更多关于freetext查询的信息:

Lazy:我知道我可以搜索“g60v”并找到它,但是如果搜索是“笔记本电脑型号g60v asus”或“g60v型号asus”,就没有了。我已经为我的一个表定义了一个全文目录。试着这样做…:WHERE CONTAINS(说明),“g60v”或“laptop”或“model”或“asus”)或类似的…:WHERE CONTAINS(说明),“g60v”和“laptop”和“model”和“asus”)我已经用我的方式更新了我的答案。但上面评论中的例子是另一种方式。懒惰:对于电子产品,实际的产品名称或型号只是一个数字,如“iPod2”或“iPhone4”。那么,您将如何构建搜索,比如“64gb iPhone4”或“64gb iPhone4”?我已经在自动插入和到CONTAINS查询中,并且在使用这些数字时没有得到任何结果。NULL表示在安装过程中确定的默认目录。(这是Microsoft SQL Server目录下的Ftdata子目录;例如,C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Ftdata。)(来自联机丛书)谢谢。。。我读了这篇文章,并查看了FTData目录。。。正如上面所列出的,除了一些XML文件之外,没有太多内容。
> **WHERE CONTAINS(*, 'iphone AND 4 AND battery')** - returns 0 results
> **WHERE FREETEXT(*, 'iphone 4 battery')** - is matching for iphone
> OR battery which is sub-optimal
> **WHERE CONTAINS(*, '"iphone 4" AND "battery"')** - returns the most
> accurate result set
WHERE FREETEXT (*, 'g60v asus laptop model' );