基本上,我正在尝试编写一个将充当我的搜索功能的存储过程。
假设我有三个表:Places
,PlaceFeatures
和查找表PlacesPlaceFeatures
我目前正在将两个参数传递给我的存储过程@Query NVARCHAR(50)
和@FeaturesFilter VARCHAR(50)
。 @Query
参数包含关键字,@FeaturesFilter
包含要匹配的逗号分隔的PlaceFeatureID
列表。
为了使用以逗号分隔的列表,我实现了一个StringToTable
拆分函数,它是一个表值函数。
目前,我的查询如下所示:
SELECT
p.Id, p.Name
FROM
Places p
INNER JOIN
PlacesPlaceFeatures ppf ON ppf.PlaceId = p.Id
INNER JOIN
StringToTable(@FeaturesFilter, ',') pf ON pf.Data = ppf.PlaceFeatureId
WHERE
FREETEXT(p.*, @Query) AND Deleted = 0
哪种方式有效。由于INNER JOIN
,它会匹配包含我通过的PlaceFeatureID
中任意一个的任何地方。我希望它只是在所有场所功能都存在的情况下匹配...
我无法将所有地方功能作为单独的参数添加到查询中,因为这是为了动态...
有没有办法在SQL Server中实现我想要的相对性能,或者我最好将我的搜索逻辑转移到像LUCENE.NET这样的东西?
感谢您的意见:)
干杯, 贾斯汀