【问题标题】:Find exact match using full-text search使用全文搜索查找完全匹配
【发布时间】:2011-12-19 09:30:40
【问题描述】:

使用 Sql Server 2008,您如何使用全文搜索实际找到完全匹配的字符串。我在这方面遇到了很大的困难,我只是在网上找不到令人满意的解决方案。

例如,如果我正在搜索字符串“Bojan Skrchevski”,我希望第一个结果就是这样。

到目前为止,我已尝试将字符串格式化为:“Bojan* NEAR Skrchevski*”并调用 CONTAINSTABLE 以获取结果,但此字符串已格式化为返回更多结果,如 Bojana 和 Bojananana 等。我还尝试按排名排序,但仍然没有成功。

此外,在我的字符串中,我有一个数字序列,例如:“3 1 7”,但使用当前格式,它还返回“7 1 3”等。

例子:

DECLARE @var varchar(4000);
SET @var = '"Oxford*" NEAR 24 NEAR 7 NEAR 5 NEAR "London*"'
SELECT [Key] FROM CONTAINSTABLE(dbo.[MyTable], [MyField], @var);

我希望能够得到准确的排序。结果没有得到“Oxford 7 24 5 London”。

如何格式化字符串以正确完成此操作?

【问题讨论】:

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


    【解决方案1】:

    有两种选择

    1) 这将获取名称中包含 Mountain 的所有项目

    SELECT Name, ListPrice
    FROM Production.Product
    WHERE ListPrice = 80.99
       AND CONTAINS(Name, 'Mountain');
    GO
    

    2) 无论顺序如何,这都会在 Document 中获取所有具有这 3 个字符串的项目

    SELECT Title
    FROM Production.Document
    WHERE FREETEXT (Document, 'vital safety components' );
    

    这取决于你真正想要什么,但我无法完全理解。

    如果我遗漏了要点,请发布示例以及结果应该是什么。

    韩国,

    克里斯托夫

    【讨论】:

    • @Kristoff - 示例:如果我搜索这样的字符串:“Oxford 24 3 6 London”并且如果有“Oxford 3 24 6 London”,这也将被返回。我只想要确切顺序中的完全匹配。
    • 作为参考,示例来自:msdn.microsoft.com/en-us/library/ms142583.aspx
    【解决方案2】:

    也许一种方法是使用全文搜索选择多个结果,然后从这些结果中选择特定的SELECT。但也许有更好的解决方案。

    我尝试了这种方法,它确实有效。它也比 SELECT 值快得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-11
      • 1970-01-01
      相关资源
      最近更新 更多