使用全文搜索多个表

时间:2009-12-21 08:34:34

标签: sql-server inner-join multiple-tables full-text-search

我正在尝试使用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,则列出其教育与关键字匹配的那些。

我希望我能解释清楚:)对不起我的英语。

3 个答案:

答案 0 :(得分:1)

也许尝试一个包含合并数据集的索引视图 - 您可以在那里添加全文索引而不是单个表,并且它可以进一步扩展到您需要的那么多表。当然,只有技巧才是空间......

答案 1 :(得分: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 
    
  3. 有关contains的详细信息。

答案 2 :(得分:0)

这就是我要进行多表全文本搜索的方式。

不太精确,但是会给出基本的想法。关键是给台钳包含OR条件。

DECLARE  @SearchTerm NVARCHAR(250)
    
SET @SearchTerm = '"Texas*"'

SELECT * FROM table1 
JOIN table2 on table1.Id = table2.FKID
WHERE (
        (@SearchTerm = '""') OR 
        CONTAINS((table1.column1, table1.column2, table1.column3), @SearchTerm) OR 
        CONTAINS((table2.column1, table2.column2), @SearchTerm)
      )