[英]Issue adding SQL FullText Search to an existing SELECT statement
我正在尝试进行全文搜索,但是在实现它时遇到了问题。 我有一个可以包含多个“标题”的对象。 我有一个存储过程,该存储过程采用一种语言和国家/地区,并根据本地化返回具有最佳“标题”的标准化结果。 我想要做的是在“标题”表上执行全文搜索,该表将搜索所有行,但仅返回标准化的默认标题。
为了获得标准化的结果,我有类似
NORMALIZING STATEMENT
SELECT MainObject.*, Title.Name, Description.Name
FROM MainObject
OUTER APPLY
(
SELECT TOP 1 Title.Name
FROM Title
WHERE Title.MainObject_ID = MainObject.ID AND Title.Language = @language
ORDER BY Title.[Default] DESC
)
OUTER APPLY
(
SELECT TOP 1 Description.Name
FROM Description
WHERE Description.MainObject_ID = MainObject.ID AND Description.Language = @language
ORDER BY Description.[Default] DESC
)
假设一个对象有3个标题,Alpha,Bravo和Charlie,而Alpha是默认标题。 我希望能够对Bravo进行全文搜索。 找到Bravo链接到的对象,但已使用上述语句对其进行了规范化。 IE搜索“ Bravo”和“ Alpha”将作为Title.Name返回。
我能想到的唯一方法是首先执行Search
FULL-TEXT STATEMENT
SELECT Title.MainObject_ID, MAX(KEY_TBL.RANK)
FROM Title
INNER JOIN
FREETEXTTABLE(Title,Name,'Some Search') AS KEY_TBL
ON Title.ID = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK >= 50
GROUP BY Title.MainObjectID, KEY_TBL.RANK
ORDER BY KEY_TBL.RANK DESC
这将返回MainObjects的列表。 然后,我可以通过top语句运行它们。 有没有一种方法可以将两者合并在一起,从而获得更好的性能?
更新:我可以在全文语句上执行WHERE IN,但是我不确定如何将RANK返回主语句,因此我可以按RANK降序对最终输出进行排序。
NORMALIZING STATEMENT
WHERE MainObject.ID IN
(
FULL-TEXT STATEMENT
)
我最终到达那里。...我从“标题”表的全文搜索开始,然后将其重新加入MainObject表并从那里进行。 我必须按我要选择的所有内容分组。
SELECT MainObject.ID, MAX(KEY_TBL.RANK) AS IndexRank, MainObject.OtherColumns, Title.Name, Description.Name
FROM Title AS FT_TBL
INNER JOIN
FREETEXTTABLE(Title,Name,'Some Search') AS KEY_TBL
ON FT_TBL.ID = KEY_TBL.[KEY]
INNER JOIN
MainObject ON FT_TBL.MainObjectID = MainObject.ID
OUTER APPLY
(
SELECT TOP 1 Title.Name
FROM Title
WHERE Title.MainObject_ID = MainObject.ID AND Title.Language = @language
ORDER BY Title.[Default] DESC
)
OUTER APPLY
(
SELECT TOP 1 Description.Name
FROM Description
WHERE Description.MainObject_ID = MainObject.ID AND Description.Language = @language
ORDER BY Description.[Default] DESC
)
GROUP BY MainObject.ID, KEY_TBL.RANK, MainObject.OtherColumns, Title.Name, Description.Name
ORDER BY IndexRank desc
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.