【问题标题】:SQL: full-text search does not work if search phrase has number inside?SQL:如果搜索词组中有数字,全文搜索不起作用?
【发布时间】:2016-07-05 07:31:52
【问题描述】:

我的搜索词组是“测试文档”。

我有一个这样的全文搜索短语查询:

SELECT doc.iEntityId, doc.strName, doc.iHandbookId
FROM m136_tblDocument doc
WHERE iLatestApproved = 1
AND doc.iDeleted = 0
AND (
(CONTAINS(doc.strName, '"test doc*"')))

结果如下图: result

但如果我尝试输入搜索短语是“test doc 3”。

它没有命中。 result.

我的预期会命中 3 次: 测试文档 23测试文档 3测试文档 1.3.1

有人可以帮助我吗?

提前致谢。

【问题讨论】:

    标签: sql-server full-text-search match-phrase


    【解决方案1】:

    全文针对文本,大文本。在您的示例中,您正在寻找一些小的东西。小是任何短于大约 100 个字符的文本。

    此代码将始终为您工作。

    SELECT doc.iEntityId, doc.strName, doc.iHandbookId
    FROM m136_tblDocument doc
    WHERE iLatestApproved = 1
    AND doc.iDeleted = 0
    AND doc.strName LIKE '%test doc 3%'
    

    使用全文可能会有点问题。在 Microsoft Connect 上发现了该功能的错误。 为了正确使用该功能,您必须阅读 BOL。例如这个很好地描述了这个特性 - https://www.simple-talk.com/sql/learn-sql-server/sql-server-full-text-search-language-features/

    对于您的情况,我的建议是用 LIKE 替换它,不用担心。索引可以提高查询性能。对其进行简短的调整以查看是否需要索引。

    【讨论】:

    • doc.strName LIKE '%test doc 3%' 没有达到预期的 3 次命中。
    • 嗯,但您的数据必须使用 '%test doc%3%'。
    • 是的,使用 LIKE '%test doc%3%' 似乎工作正常。所以我们可以通过空格将短语分成单词。然后我们将通过为每个单词添加 % 来构建搜索短语。谢谢你的想法。这是个好方法:)
    猜你喜欢
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 2011-06-11
    • 1970-01-01
    相关资源
    最近更新 更多