【问题标题】:Search Apostrophe using Fulltext Thesaurus search使用全文叙词搜索来搜索撇号
【发布时间】:2014-04-10 08:15:59
【问题描述】:

我正在尝试在我们的一张桌子上实现全文搜索,一切都运行顺利,除了涉及国际这个词。

在表格中,出现的单词的形式是intlint'linternational,因此我在词库文件中反映了这一点:

<expansion>
    <sub>intl</sub>
    <sub>int'l</sub>
    <sub>international</sub>
</expansion>

但是,在尝试进行此搜索时,它只会匹配 intl 和 international 以及需要精确搜索的 int'l。有什么方法可以将撇号包含在搜索中?

相关的查询部分是这样的(不完全是,但类似):

SELECT * FROM CustomerTable Where contains((CustomerName), 'FORMSOF(Thesaurus, "int''l")')

我决定看看它是用什么词来解析的

SELECT display_term as term FROM sys.dm_fts_parser ('FORMSOF(Thesaurus, "int''l")', 0, null, 0)

结果显示我正在拆分 intl

+---------------+
|     term      |
+---------------+
| int           |
| l             |
| intl          |
| international |
+---------------+

【问题讨论】:

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


    【解决方案1】:

    问题是中性语言的分词器不允许在单词中使用撇号。您可以将全文索引的语言切换为英语(并重新索引),或创建自己的自定义 word-breaker 以允许使用撇号。

    互联网上似乎缺乏自定义分词器的示例,但您可以先查看构建 SQL 全文的 Windows Search SDK:

    Windows Search Developer's Guide

    Windows Search: Extending the Index

    【讨论】:

    • 嗯,谢谢你的帮助,这真的很混乱,因为我能找到的唯一说明告诉我创建一个自定义字典,这是不可能的,因为我们不知道他们使用什么缩写。 ://
    • “问题是默认的分词器不允许在单词中使用撇号。”你有任何来源吗?我在您提供的链接中找不到它。我遇到了类似的问题,我无法使用带撇号的通配符 * 进行搜索
    • 我的原始答案不清楚中性与英语。我已经更新了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    相关资源
    最近更新 更多