我有一个包含我的广告的表格,可以在sql-server-2008中搜索。请参阅下面的代码。广告搜索表中的is_searchable基本上是该广告是否应包含在搜索中的标志。
以下三个例子在我心目中产生了不合理的结果:
第二个示例显示了where子句过滤掉不真实的可搜索记录的结果。由于在查询的from部分的containstable中未返回none,因此在应用where子句时未返回none。
第三个例子只是将排名靠前的排名从1000改为4000。
因此,我的问题是,如何使用“is_searchable=1”子句获得前1000个或n个结果?
use live;
declare @search_text as varchar(2000) = '"*interlet*"'
--- TOP 1000 without clause (returns 1000 rows (all with is_searchable = 0)
select is_searchable, *
from CONTAINSTABLE (ad_search, searchText, @search_text, 1000) AS KEY_TBL
inner join ad_search (nolock) ON ad_search.ad_search_id = KEY_TBL.[KEY]
inner join ad_search_view_data on ad_search_view_data.ad_search_id = ad_search.ad_search_id
--- TOP 1000 with "where ad_search.is_searchable = 1" clause returns 0 rows
select is_searchable, *
from CONTAINSTABLE (ad_search, searchText, @search_text, 1000) AS KEY_TBL
inner join ad_search (nolock) ON ad_search.ad_search_id = KEY_TBL.[KEY]
inner join ad_search_view_data on ad_search_view_data.ad_search_id = ad_search.ad_search_id
where ad_search.is_searchable = 1
-- TOP 4000
select is_searchable, *
from CONTAINSTABLE (ad_search, searchText, @search_text, 4000) AS KEY_TBL
inner join ad_search (nolock) ON ad_search.ad_search_id = KEY_TBL.[KEY]
inner join ad_search_view_data on ad_search_view_data.ad_search_id = ad_search.ad_search_id
where ad_search.is_searchable = 1