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,列出其教育与关键字匹配的人。

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

4

3 回答 3

1

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

于 2009-12-22T09:46:25.727 回答
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)
      )
于 2020-11-26T07:57:08.923 回答
-1

有几点我不明白这会影响你的速度。

  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 
    

有关包含的更多信息。

于 2009-12-21T11:07:33.527 回答