如何跨多个表使用全文搜索,SQL Server 2005
我有一个全文目录,其中有两个表。
tableA 有 4 列(a1、a2、a3、a4),其中 3 列在目录 a2、a3、a4 中建立了索引。 a1 是主键。
tableB 有 3 列(b1、b2、b3、b4),其中两列在目录中建立了索引:b3 和 b4。 b1是该表的PK,b2是表A的FK。
我想做类似的事情
SELECT *, (ftTableA.[RANK] + ftTableB.[RANK]) AS total_rank
FROM tableA
INNER JOIN tableB ON tableA.a1=tableB.b2
INNER JOIN FREETEXTTABLE(tableA, (a2,a3,a4), 'search term') as ftTableA ON tableA.a1=ftTableA.[KEY]
INNER JOIN FREETEXTTABLE(tableB, (b3,b4), 'search term') as ftTableB ON tableB.11=ftTableB.[KEY]
但这不起作用...... 我可以让一张桌子工作,例如。
SELECT *, (ftTableA.[RANK] + ftTableB.[RANK]) AS total_rank
FROM tableA
INNER JOIN FREETEXTTABLE(tableA, (a2,a3,a4), 'search term') as ftTableA ON tableA.a1=ftTableA.[KEY]
但绝不会超过一张桌子。
有人可以给出对多个表进行全文搜索所需的步骤的解释和/或示例吗?
I have a full text catalog with two tables in it.
tableA has 4 columns (a1, a2, a3, a4) of which 3 are indexed in the catalog, a2,a3,a4.
a1 is the primary key.
tableB has 3 columns (b1, b2, b3, b4), two of which are indexed in the catalog, b3 and b4. b1 is the PK of this table, b2 is the FK to tableA.
I want to do something like
SELECT *, (ftTableA.[RANK] + ftTableB.[RANK]) AS total_rank
FROM tableA
INNER JOIN tableB ON tableA.a1=tableB.b2
INNER JOIN FREETEXTTABLE(tableA, (a2,a3,a4), 'search term') as ftTableA ON tableA.a1=ftTableA.[KEY]
INNER JOIN FREETEXTTABLE(tableB, (b3,b4), 'search term') as ftTableB ON tableB.11=ftTableB.[KEY]
But this does not work...
I can get a single table to work, eg.
SELECT *, (ftTableA.[RANK] + ftTableB.[RANK]) AS total_rank
FROM tableA
INNER JOIN FREETEXTTABLE(tableA, (a2,a3,a4), 'search term') as ftTableA ON tableA.a1=ftTableA.[KEY]
but never more than one table.
Could someone give an explanation and/or example of the steps required to full-text search over multiple tables.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果 A 和相关 B 都包含搜索文本,则您的查询仅返回记录。
不过,您没有说明什么不起作用。
为什么不 LEFT OUTER JOIN 全文搜索并替换:
和
Your query only returns records, if both A and related B contains the search text.
You do not state what does not work, though.
Why not LEFT OUTER JOIN the fulltext searches, and replace:
and
我不确定我理解你想要做什么。 我将您的问题解释为您想要返回表 A 中与搜索词匹配的所有项目。 此外,您想要对 TableA 中的项目加上 TableB 中的匹配项目的排名求和。
我能想到的最好方法是使用带有 3 个查询的表变量。
这不像使用一个查询那么优雅,但它应该很容易理解,并允许您决定是否在第三个查询中包含记录。
I'm not positive that I understood what you were trying to do. I interpreted your question as you want to return all items in Table A that matched the search term. Furthermore you wanted to sum the rank from the item in TableA plus the matching items in TableB.
The best way I can think to do this is to use a table variable with 3 queries.
This isn't as elegant as using one query, but it should be easy to follow and allows you to decide whether or not to include records in the 3rd query.