全文检索索引中的缩写

Han*_*non 7 sql-server full-text-search sql-server-2012

我有一个文本列,其中包含已缩短为缩写的各种单词。例如,该列可能包含“insd”而不是“insured”。我知道我可以使用同义词库文件来创建同义词列表,从而有效地允许搜索“insd”以返回包含“insured”和“insd”的行。完美的。

但是,该列中的其他一些缩写包含“特殊”字符,例如斜杠或与号,例如:

t/p - 第三方
o/s - 另一边
p/p - 每人
i&o - 内外兼修

有什么方法可以让我做出CONTAINSFREETEXT理解包含这些词的查询?例如:

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