【发布时间】:2016-02-28 18:24:21
【问题描述】:
我的标题听起来很复杂,但情况很简单。人们使用诸如“blackfriday”之类的术语在我的网站上进行搜索。
当他们进行搜索时,我的 SQL 代码需要在各个位置(例如 ProductTitle 和 ProductDescription 字段)查找该术语。例如:
SELECT *
FROM dbo.Products
WHERE ProductTitle LIKE '%blackfriday%' OR
ProductDescription LIKE '%blackfriday%'
但是,该术语在数据库字段中的显示方式有所不同。它最喜欢出现在诸如“Black Friday USA 2015”之类的单词之间的空格。那么在不通过WHERE 子句(例如WHERE ProductTitle LIKE '%Black-Friday%')添加更多组合的情况下,有没有更好的方法来完成这种模糊搜索?
我在上述字段上启用了全文搜索,但是当我使用CONTAINS 子句时,它真的不是那么好。当然,其他术语可能没有这个例子那么简洁。
【问题讨论】:
-
可能有一种更简洁、更简单的方法,但我的第一个想法是使用 REPLACE 来消除搜索词和列中的标点符号和空格。
-
FREETEXT (正如您在回答中提到的)是处理单词变化的最佳解决方案。但它不会帮助匹配像
blackfriday这样的组合词,除了可能 通常组合词,如dogcatcher,尽管我什至不确定它是否可以做到这一点。让我知道是否需要处理 任何 组合词,我可以提供帮助。 -
@Keith 是的,请 Keith,它的组合词让我很生气!如果您有任何建议,我将非常感谢
标签: sql sql-server search full-text-search sql-server-2014