none
sql2005全文索引查询精确匹配的问题 RRS feed

  • 问题

  • 表中A字段有内容"isbl:1"或者"isbl:0",用contains(A,"isbl:1")查询会把isbl:0也显示出来,怎么精确的匹配
    2011年4月19日 10:05

答案

  • 有关全文检索,请参考以下内容,我觉得通过自造词可能对您的问题适用。来自http://blog.xuite.net/garyhuan/programmer/13237369

    使用SQL Server的全文檢索功能,在SQL2K + Win2K3或是SQL2K5下,會產生某些字詞明明存在資料中,但卻檢索不到的情形,例如「土石流」,但相同的資料在SQL2K+Win2K下卻是OK的。

    好不容易有機會和微軟RD人員討教這個問題,得到兩個解決方法:

    1. 更換Word Breaker
      • Word Breaker是全文檢索的分詞工具,在Win2K下是採斷字,可能查詢效能差一點,但是不會有找不到的詞句(因為是斷字),而在Win2K3,這個分詞工具改為斷詞,這下問題就來了,如果系統中沒有這個詞彙,就找不到了。
      • SQL2K是使用作業系統的Word Breaker,因此搭配Win2K沒有問題,但換到Win2K3下就出問題。
      • SQL2K5則是使用自己的Word Breaker,但那個Word Breaker基本上和Win2K3是一樣的,因此一樣會有問題。
      • 解決方法,把SQL2K5的Word Breaker換回Win2K的版本:
        1. 停止服務中的 SQL Server Fulltext Search Service
        2. 開啟命令提示,切換到 C: Program FilesMicrosoft SQL ServerMSSQL.1MSSQLBinn 下,執行 "regsvr32 /u chtbrkr.dll",將原來的word breaker解除註冊。
        3. 將這個目錄下的chtbrkr.dll備份出來。
        4. 從Win2K的機器上搜尋chtbrkr.dll(應該是在WinNTSystem32下),複製到SQL2K5的機器上前述目錄下,取代原有程式。
          注意:只有版本編號為3.0.0.1507,大小822K的檔案才是對的,我在三台機器上找到的都是版本編號:5.0.2134.1,大小12.2K的程式檔(怪!版次高體積卻小),經過測試,在查詢的時候會出錯。
        5. 回到先前的命令提示,執行"regsvr32 chtbrkr.dll",重新註冊。
        6. 開啟SQL Server Management Studio,執行下列SQL指令"sp_fulltext_service 'verify_signature', 0 "。
        7. 到服務啟動SQL Server Fulltext Search Service
        8. 重建資料庫中的全文檢索索引。
    2. 自建詞句:
      不更換Word Breaker的話,其實可以透過自訂詞彙的方式,增加全文檢索的詞句,參考:
      http://www.microsoft.com/technet/prodtechnol/office/sharepoint/2003/maintain/spmultil.mspx
      (此文有打錯字的情況,請參考下列步驟)
      1. 建立一個UNICODE的文字檔,取名為TCAINLEX.txt,並將要增加的詞彙一詞一行打進去,這是有區分大小寫的。
      2. 把這個檔案複製到前述Word Breaker所在的目錄下。
    • 已标记为答案 Ai-hua Qiu 2011年4月27日 2:53
    2011年4月20日 7:22