2009-06-02 97 views
0

我已經在單個表中的單個字段上設置了FTS。需要Sql Server 2008和全文搜索幫助

Field: Name NVARHCHAR(350) NOT NULL 

現在,當我搜索以下

1 ave 
10 ave 

我不回來,結果我的期望。

首先,將搜索查詢1 ave轉換爲"1*" AND "ave*"。現在,我跑我CONTAINS(..)查詢......

SELECT FooId, Name 
FROM [dbo].[Names] 
WHERE CONTAINS(Name, @SearchQuery) 

然後,用正確的結果一起,我也得到這些不正確的結果回來......

2 Ave (a couple of entries .. but they are all unique entires). 

那麼,這究竟是怎麼得到檢索?那段文字中沒有1*?它的數字被忽略了嗎?

另外 - 這一點很重要 - 我已經刪除了對停止列表的引用並重建目錄。

嗯。我很困惑。任何人有任何建議?

+1

我認爲您的轉換後的字符串應爲 「1 *」和「ave *」 - 缺少關閉「上的」1 * – Tetraneutron 2009-06-02 01:50:35

+0

正確。發現得好。固定。 – 2009-06-02 11:07:38

回答

0

「1」可以發生在全文搜索索引列中的任何地方,它不必直接在「Ave」之前(或甚至在此之前),在那一行的其他地方是否有1?

+0

是的,在..郵編:(從我的跛問題。appologies。 – 2009-06-02 12:07:28

0

全文索引將找到的話derivitaves - 就像如果你搜索來看,它可能會覺得跑步,跑步,運行等

不知其決定是2接近1,並返回一個作爲近乎匹配。您應該嘗試將查詢切換到CONTAINSTABLE查詢,以便您還可以評估RANK以確定哪個答案更接近匹配。然後,您可以決定一個閾值,並篩選出不符合標準的行,以確定它們的匹配程度。

編輯:它不這樣做的拐點思維1是近2我跑,看起來像這樣的樣表測試查詢...

PK   Name 
1   1 ave 
2   10 ave 
3   2 ave 
4   12 avenue 
5   13 avenue 
6   100 ave. 
7   200 ave 
8   210 avenue 

這裏是我跑的查詢...

select * 
from Table_1 
where contains(name, '"1*" and "ave*"') 

而這裏的結果我得到...

PK   Name 
2   10 ave 
4   12 avenue 
5   13 avenue 
6   100 ave. 

這裏有趣的是,第一個記錄在表中找不到。 (我在SQL 2008 Dev版上運行了這個)。根據這些結果(沒有找到以2開頭的任何內容) - 我會仔細檢查您的查詢。也許發佈整個查詢的全文,包括搜索變量的設置位置。