8

検索で渡された文字列を分解するとしましょう。例:「犬 がいた場合」「犬がいた場合」(愚かなアメリカ人)。

「 」に基づいて爆発するので、結果は...

if
there
were
a
dog

今私は実行したいSQL select * from table_name query where column_name like '%something%' or column_name like '%somethingelse%'...

テーブルを検索し、最も多くの一致を含む行で並べ替える方法を決定しようとしています。(つまり、行45に上記の分割項目が4 つ含まれていて、行21に2しか含まれていない場合、行45が結果の一番上に表示されるはずです)。

これは原始的な「検索関連性」ロジックです。SQL でこの種の検索を表す特定の用語はありますか?

提案?

4

2 に答える 2

7

比較をorder by句に入れ、caseステートメントを使用して比較を 0/1 に変換し、合計します。

select *
from table_name query
where column_name like '%something%' or column_name like '%somethingelse%'
order by ((case when column_name like '%something%' then 1 else 0 end) +
          (case when column_name like '%somethingelse%' then 1 else 0 end)
          . . .
         ) desc

クエリを次のように書く傾向があります。

select (Match1+Match2+. . .) as NumMatches, <rest of columns>
from (select t.*,
             (case when column_name like '%something%' then 1 else 0 end) as Match1,
             . . .
      from tablename
     ) t
order by NumMatches desc
于 2013-02-07T19:40:17.967 に答える
1

@Gordonの優れた回答のバリエーションを次に示します。

SELECT FieldToSearch, 
  CASE WHEN ' ' + FieldToSearch + ' ' like '% if %' then 1 else 0 end
      + CASE WHEN ' ' + FieldToSearch + ' ' like '% there %' then 1 else 0 end 
      + CASE WHEN ' ' + FieldToSearch + ' ' like '% was %' then 1 else 0 end
      + CASE WHEN ' ' + FieldToSearch + ' ' like '% a %' then 1 else 0 end
      + CASE WHEN ' ' + FieldToSearch + ' ' like '% dog %' then 1 else 0 end matches
FROM YourTable
ORDER BY matches DESC

そして、ここにFiddleがあります。

頑張ってください!

于 2013-02-07T19:51:09.907 に答える