私は3つのテーブルがリンクしています。レストラン、料理、料理の種類。 レストランが(それは悪い言葉遣いだが、あなたのアイデアを得る?)食品の多くの料理を販売することができ全文検索、ベストマッチの結果をフィルターにする
は、だから私はレストランの全文を設定している:名前、CityTown、郵便番号やCuisineTypeには:私は1件の検索ボックスを持っている
名前私のホームページには、ユーザタイプの結果が最もよく一致するようにフィルタリングされています。
ここにいくつかの例があります:SearchText = "Royal D Ed" 王朝と名づけられた場所のレストランがあり、町はエジンバラです。 しかし、私の一番の結果は、どこかのwherの町は、名前だけでなくDで始まります。これは最高のマッチではありません。
私はあなたに私の格納されたprocを見せてくれます。プロトタイプですので、派生した名前はちょっと怪しいです。
ALTER PROCEDURE [dbo].[RestaurantsFullText]
@searchText nvarchar(255)
AS
SELECT
b.*,
COALESCE(akt2.[Rank],0)/30 +
COALESCE(akt1.[Rank],0)/30 +
COALESCE(akt.[Rank],0)/30 +
COALESCE(bkt.[Rank],0) as rankCount
FROM
Restaurants b
left JOIN Cuisines c on b.Id = c.RestaurantId
left join CuisineType a
ON c.CuisineId = a.id
left JOIN
containstable(Restaurants, Name, @searchText) bkt
ON b.id = bkt.[Key]
left JOIN containstable(CuisineType, Name, @searchText) akt
ON a.id = akt.[Key]
left JOIN containstable(Restaurants, Postcode, @searchText) akt1
ON b.id = akt1.[Key]
left JOIN containstable(Restaurants, citytown, @searchText) akt2
ON b.id = akt2.[Key]
where
COALESCE(akt2.[Rank],0)/30 +
COALESCE(akt1.[Rank],0) /30 +
COALESCE(akt.[Rank],0)/30 +
COALESCE(bkt.[Rank],0) > 5
ORDER BY
COALESCE(akt2.[Rank],0)/30 +
COALESCE(akt1.[Rank],0)/30 +
COALESCE(akt.[Rank],0)/30 +
COALESCE(bkt.[Rank],0) asc
問題はジョインにあり、ランクが計算される方法だと思います。
私はそれが "ロイヤルダイナスティーエジンバラd"を渡す場合、王朝はまだ最高の試合ですので、それが欲しいです。
フィルタであるため、dで始まる他の都市の町との一致は返されません。
私はこの点で非常に助かります。
は早朝にプレーしました。幸運:) – u07ch
ありがとう、私は少し設計を更新しました(私は一度に少しビットをやっているので、デザイナーではありません)) 私は検索とフィルタとして他のfatures上で次の数日間過ごす必要があると思う郵便番号ですべてが私の頭の中でhaをしている。私はSQLを全く使っていない – ddd