使用特殊字符进行全文搜索

时间:2016-02-18 15:38:32

标签: sql sql-server search full-text-search search-engine

我有一张表格,其中包括" F-10"或者" Jim-beam"。如果用户搜索过,那么有没有办法让我得到这些结果" F10"或者" Jimbeam"?基本上,用户可能不知道条目中有短划线,但我希望搜索能够容易找到它。

现在我正在尝试使用:

SELECT *
WHERE
    CONTAINS(table.*, ,'"F10*" Or "Jimbeam*"')

3 个答案:

答案 0 :(得分:0)

您可以创建数组以从用户

获取插入的值

然后对数组

中的每个值使用类似%value1%或类似%value2%

它可能是一个解决方案

答案 1 :(得分:0)

您可以尝试使用不包含任何特殊字符的值替换数据库中的值。我之前使用过这个答案中描述的功能:https://stackoverflow.com/a/1008566/894974 因此,安装该函数后,您的where子句将变为:

where dbo.RemoveNonAlphaCharacters([columnToSearch]) like '%'+@searchString+'%'

答案 2 :(得分:0)

您可以创建一个单独的列,从这些单词中删除短划线,然后针对该列执行全文搜索。

例如,您的表格看起来像这样(或者新列可能是新表格的一部分):

Id  Text            TextForFullTextSearch
-----------------------------------------
1   Jim-beam        Jimbeam
2   F-10            F10
3   blah blah       blah blah

如果您需要支持"Jimbeam*""Jim-beam*"上的搜索,那么您可以针对旧列和新列执行全文搜索。

这确实需要您将文本存储两次,以便您的流程中有更多的齿轮。这样做的好处在于搜索的准确性和性能(LIKE会慢得多),因此您必须权衡这些优势与增加的复杂性。

插入并更新了将新列填充为数据的一些想法:

  • 在您的数据层处理此问题,即所有插入和更新语句都应包含Text和TextForFullTextSearch。
  • 向表中添加插入/更新触发器,无论何时插入或更新Text,都会同时更新TextForFullTextSearch。
  • 创建一个自动作业,不断轮询表格以进行插入/更新,然后相应地更新TextForFullTextSearch。