4

これを返すプロシージャがあります。

SELECT TOP 15 SearchName, AlternateName, CountryName, StateProvince, Latitude, Longitude, Type, boost + k.Rank as Rank
FROM SearchLocations
    INNER JOIN CONTAINSTABLE([SearchLocations], [SearchName], @Search) AS k
    ON SearchLocations.Id = k.[Key]
ORDER BY Rank DESC

基本的には、全文検索[SearchLocations]を行い、全文ランキングとブースト列に基づいて結果を並べ替えます。問題は、'ISABOUT("L*" WEIGHT(1.0))' を検索すると、"L" の入力として '@Search' に渡されるもので、次のような都市です。

  • ラゴス ラゴス ナイジェリア
  • ペルー リマ県リマ

よりも高く表示されLos Angeles California United Statesます。ブーストは低くなりますが、同じ単語を繰り返しているため、全文検索のランキングが高くなります。これは、単語を繰り返さないが、同じサブワードが複数回ある場所の場合にも発生します。

これを無効/回避するにはどうすればよいですか?

4

2 に答える 2

0

たぶん、boost列で注文する必要があります:

SELECT TOP 15 SearchName, AlternateName, CountryName, StateProvince, Latitude, Longitude, Type, boost + k.Rank as Rank
FROM SearchLocations
    INNER JOIN CONTAINSTABLE([SearchLocations], [SearchName], @Search) AS k
    ON SearchLocations.Id = k.[Key]
ORDER BY boost desc;

rankを使用しているからといって、 で注文する必要はありませんCONSTAINSTABLE()

于 2013-07-09T20:36:49.687 に答える