我正在尝试使用“sony model number np-fx110”或“sony sz-vgn770N便携包”或“asus笔记本电脑型号g60v”等字词进行自由文本搜索。
我知道freetext会将数字视为噪音,所以我想我会编辑噪音SQL Server 2008 noiseENU.txt文件中的数字,但我无法在服务器上找到任何噪音文件。
FTData目录只包含一堆2kb xml文件和一个空的FilterData文件夹。
我有一个split函数,它将返回给定字符串中包含空格的分割字符的所有单词。我需要一个CTE,它将连接从SPLIT()函数返回的每个单词的AND文本。
> SELECT * FROM MyTable WHERE
> Description LIKE '%asus%' AND
> Description LIKE '%laptop%' AND
> Description LIKE '%model%' AND
> Description LIKE '%g60v%'
基本上,型号可以在描述字段中的任何位置。我可以很容易地做一个LIKE [型号],但是我希望将它与描述中包含的其他词匹配。
这似乎不是一种最佳方法,但可行。关于如何解决这个问题的任何其他建议将不胜感激。
感谢。
更新
以下是运行“exec sp_help_fulltext_catalogs”
的结果> ftcatid:5 NAME: CTIMytemDataCatalog
> PATH: NULL
> STATUS: 0
> NUMBER_FULLTEXT_TABLES: 1
更新
当型号只是一个数字时出现问题,例如“iphone 4”中的“4”。
我已经在动态构建CONTAINS查询,在每个术语之间插入AND。但是,这里有一些问题:
> **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
鉴于这些发现,我认为我应该在表格中维护这些“特殊情况”的列表,并基于此动态生成我的CONTAINS查询。
有关此方法的任何建议吗?
答案 0 :(得分:1)
您是否尝试过使用全文索引?
你是正确的,默认情况下SQL将“1”或“2”视为噪音(你可以改变这个)......但它应该找到“g60v”或“sz-vgn770N”没问题。我以类似的方式使用FTS搜索ISBN的书籍目录,并且工作正常。
最后,我可能在这个问题上错了......但我认为在您实际构建/使用FTS之前不会创建噪声文件。
另请注意,搜索FTS与使用like语句不相似。 Read up on the different methods如果您不熟悉语法,可以使用联机丛书搜索FTS。
这样的查询应该可以满足您的需求:(我如何在我的图书目录搜索中使用FTS)
WHERE FREETEXT (*, 'g60v asus laptop model' );
在此处阅读有关freetext查询的更多信息:http://msdn.microsoft.com/en-us/library/ms176078.aspx