在一个非常典型的场景中,我的Web应用程序上有一个"搜索"文本框,其中用户输入直接传递给存储过程,然后使用全文索引搜索两个表中的两个字段,这两个表使用适当的键连接.
我正在使用CONTAINS谓词来搜索字段.在传递搜索字符串之前,我执行以下操作:
SET @ftQuery = '"' + REPLACE(@query,' ', '*" OR "') + '*"'
例如,将城堡改为"*"或"城堡*".这是必要的,因为我希望人们能够在cas上搜索并获得城堡的结果.
WHERE CONTAINS(Building.Name, @ftQuery) OR CONTAINS(Road.Name, @ftQuery)
问题是,现在我已经附加通配符每个单词的末尾,噪音词(如该)也通配符追加,因此不再出现会被丢弃.这意味着搜索城堡将返回带有剧院等单词的项目.
将OR更改为AND是我的第一个想法,但如果在查询中使用了干扰词,则似乎只返回不匹配.
所有我试图实现是允许用户输入多个空格分隔单词respresent无论是整体还是他们搜索的词的前缀,以任意顺序-落音词,如在从输入(否则当他们搜索城堡时,他们会得到一个大项目列表,结果他们需要在列表中间的某个位置.
我可以继续实现我自己的干扰消除程序,但似乎全文索引应该能够处理的东西.
感谢任何帮助!
杰米
在存储索引之前,会删除干扰词.所以不可能编写一个搜索停用词的查询.如果您真的想要启用此行为,则需要编辑停用词列表.(http://msdn.microsoft.com/en-us/library/ms142551.aspx)然后重新构建索引.