全文搜索精确匹配检查SQL Server
我在视图上进行了全文搜索,该视图返回所有已批准的业务和有关所述业务的元数据 我使用以下代码实现了一个存储过程来利用全文搜索:全文搜索精确匹配检查SQL Server,sql,sql-server,full-text-search,Sql,Sql Server,Full Text Search,我在视图上进行了全文搜索,该视图返回所有已批准的业务和有关所述业务的元数据 我使用以下代码实现了一个存储过程来利用全文搜索: CREATE PROCEDURE [dbo].[Search] @SearchTerm varchar(8000), @CurrentPage int = 1, @PageSize int = 100 AS BEGIN DECLARE @NearPredicate varchar(8000), @AndPredicate varcha
CREATE PROCEDURE [dbo].[Search]
@SearchTerm varchar(8000),
@CurrentPage int = 1,
@PageSize int = 100
AS
BEGIN
DECLARE @NearPredicate varchar(8000),
@AndPredicate varchar(8000),
@TotalRecords int
SELECT
@NearPredicate = COALESCE(@NearPredicate + ' NEAR ', '') + Data
FROM Split(@SearchTerm, ' ')
LEFT JOIN sys.fulltext_system_stopwords ON Data = stopword
WHERE stopword IS NULL
SET @AndPredicate = REPLACE(@NearPredicate, 'NEAR', 'AND')
SET @NearPredicate = '(' + @NearPredicate + ')'
SET @TotalRecords = (
SELECT
COUNT(*)
FROM
vwApprovedBusiness
WHERE FREETEXT(*, @AndPredicate )
)
SELECT *,
ct.Rank,
@TotalRecords AS TotalRecords
FROM
vwApprovedBusiness a
INNER JOIN FREETEXTTABLE (vwApprovedBusiness, *, @NearPredicate ) AS ct ON a.MyBusinessID = ct.[KEY]
ORDER BY
ct.RANK DESC
OFFSET (@CurrentPage - 1) * @PageSize ROWS FETCH NEXT @PageSize ROWS only
END
如果我搜索一个企业名称,例如一人交通,这是一个经批准的企业,它只会出现在我的搜索结果中,大约在第6或第7位,而不是预期的第一个结果。任何与此相关的帮助都将不胜感激 我建议将全文搜索调用从FREETEXT/FREETEXTTABLE转换为CONTAINS/CONTAINSTABLE,因为我认为在搜索say business name时,FREETEXT是不合适的,因为这是确切的短语。根据MSDN文件: CONTAINS和FREETEXT对于不同类型的匹配很有用,如下所示:
- 使用CONTAINS(或CONTAINSTABLE)对单个单词和短语进行精确的或模糊的(不太精确的)匹配,单词之间在一定距离内的接近度,或加权匹配
- 使用FREETEXT(或FREETEXTTABLE)匹配指定单词、短语或句子(FREETEXT字符串)的含义,而不是确切的措辞。如果在指定列的全文索引中找到任何术语或任何术语的形式,则会生成匹配项
SELECT *,
ct.Rank,
-- @TotalRecords AS TotalRecords
COUNT(*) over () as TotalRecords
FROM
vwApprovedBusiness a
INNER JOIN FREETEXTTABLE (vwApprovedBusiness, *, @NearPredicate ) AS ct ON a.MyBusinessID = ct.[KEY]
这就是答案吗?见flups答案