2009-12-21 114 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

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