2009-12-21 105 views
4

我正在嘗試使用asp和SQL Server全文進行詳細搜索。以多文件搜索輸入全文

當提交一個關鍵字時,我需要在多個表中進行搜索。例如,

表 - 成員

  • member_id
  • contact_name

表 - 教育

  • member_id
  • school_name

我的查詢;

select mem.member_id, mem.contact_name, edu.member_id, edu.school_name from Members mem FULL OUTER JOIN Education edu on edu.member_id=mem.member_id where CONTAINS (mem.contact_name, '""*"&keyword&"*""') or CONTAINS (edu.school_name, '""*"&keyword&"*""') order by mem.member_id desc;

這個查詢工作,但它需要很長的時間來執行。

該圖像的關鍵字是Phill;如果mem.contact_name匹配,然後列出它,或者如果edu.school_name matches,列出教育匹配關鍵字的人。

我希望我能解釋得很好:)雖然對不起我的英語。

+0

順便說一句,我不能使用聯盟,因爲成員和教育領域是不一樣的。我還需要在Members表上的contact_address中進行搜索。 – 2009-12-21 08:35:47

+0

你可能會發現這個問題的答案有用:http://stackoverflow.com/questions/2063561/sql-server-full-text-search-create-one-computed-column。 – 2010-01-21 13:00:55

回答

0

幾點我不明白這會影響你的速度。

  1. 你真的需要一個完整的外連接嗎?這是在殺你。看起來這些表是一對一的。在這種情況下,你不能讓它成爲內部連接嗎?
  2. 你能不能傳遞到包含列列表,像這樣:

    SELECT mem.member_id, 
        mem.contact_name, 
        edu.member_id, 
        edu.school_name 
    FROM members mem 
        INNER JOIN education edu ON edu.member_id = mem.member_id 
    WHERE Contains((mem.contact_name,edu.school_name),'*keyword*') 
    ORDER BY mem.member_id DESC 
    

更多信息關於contains

+3

Sql Server無法進行前綴匹配,所以只有'keyword *'是有用的。另外:'消息7646,級別16,狀態1,行7 全文謂詞引用來自兩個不同表或索引視圖'mem'和'edu'的列是不允許的。 – 2013-09-14 16:12:35

1

也許嘗試一個包含合併數據集的索引視圖 - 您可以在其中添加全文索引而不是單個表,並且它可以進一步擴展到您需要的行數。當然,唯一的竅門就是空間...