Han*_*non 7 sql-server full-text-search sql-server-2012
我有一个文本列,其中包含已缩短为缩写的各种单词。例如,该列可能包含“insd”而不是“insured”。我知道我可以使用同义词库文件来创建同义词列表,从而有效地允许搜索“insd”以返回包含“insured”和“insd”的行。完美的。
但是,该列中的其他一些缩写包含“特殊”字符,例如斜杠或与号,例如:
t/p - 第三方 o/s - 另一边 p/p - 每人 i&o - 内外兼修
有什么方法可以让我做出CONTAINS
或FREETEXT
理解包含这些词的查询?例如:
SELECT *
FROM dbo.MyTable
WHERE FREETEXT(MyColumn, 't/p');
Run Code Online (Sandbox Code Playgroud)
我已经在tsenu.xml
实例的正确位置创建了同义词库文件:
<XML ID="Microsoft 搜索词库"> <thesaurus xmlns="x-schema:tsSchema.xml"> <diacritics_sensitive>0</diacritics_sensitive> <扩展> <sub>投保</sub> <sub>insd</sub> </展开> <扩展> <sub>t/p</sub> <sub>第三方</sub> </展开> <扩展> <sub>o/s</sub> <sub>另一边</sub> </展开> <扩展> <sub>p/p</sub> <sub>每人</sub> </展开> </同义词库> </XML>
并使用 加载它EXEC sys.sp_fulltext_load_thesaurus_file 1033;
,但是查询返回不可预测的结果。
小智 4
当您想要添加涉及特殊字符并希望将其视为单个单词的单词时,您将需要创建一个自定义词典。
\n\n为要在 SQL Server 2008 全文索引中索引 \xe2\x80\x98as-is\xe2\x80\x99 的特殊术语创建自定义词典
\n\n请注意,自定义词典的大小有限,而且词典越大,全文就越慢。
\n\n当您需要添加有限的单词集(例如 AT&T 或 M&M)时,自定义词典非常有用,这些单词带有特殊字符,可能会反复使用,您希望将其视为单个单词而不是默认的断词行为。
\n\n自定义词典不太适合零件编号(例如 JY-14562、PTW-14432 等)等单词,因为表中的每一行都会在自定义词典中产生一个新条目。您可能有数十万或更多的唯一部件号。这对于自定义词典来说不是一个很好的用途。如果您需要这种类型的行为,最好编写自己的分词器。创建分词器没有很好的文档记录,也不容易创建,但它确实允许您决定在遇到特殊字符时如何分词。
\n