0

検索語との関連性に基づいて検索結果を引き出すクエリがあります。

SELECT *, 
( (1.3 * (MATCH(strTitle) AGAINST ('+john+smith' IN BOOLEAN MODE))) + (0.6 * (MATCH(txtContent) AGAINST ('+john+smith' IN BOOLEAN MODE)))) AS relevance 
FROM content 
WHERE (MATCH(strTitle,txtContent) AGAINST ('+john+smith' IN BOOLEAN MODE) ) 
ORDER BY relevance DESC

また、検索一致の最初のインスタンスを説明から抽出できるようにしたいと思います。したがって、「john smith」を検索する場合は、結果を次のように表示します。

ページタイトル1...johnsmithに一致するスニペット..。

ページタイトル2...スニペットジョンマッチング...。

ページタイトル3....ジョンに一致するスニペットスミス..。

などなど

これはどのように可能ですか?

4

1 に答える 1

1

これは、case ステートメントで行います。

select *,
       ( (1.3 * (MATCH(strTitle) AGAINST ('+john+smith' IN BOOLEAN MODE))) + (0.6 * (MATCH(txtContent) AGAINST ('+john+smith' IN BOOLEAN MODE)))) AS relevance,
      (case when MATCH(strTitle) AGAINST ('+john+smith' IN BOOLEAN MODE)) > 0
            then 'snippet matching +john+smith'
            . . .
       end)

個人的には、一致をサブクエリの個別の変数として配置します。

select
from (select t.*,
             MATCH(strTitle) AGAINST ('+john+smith' IN BOOLEAN MODE)) as match_join_smith,
             . . .
      from t
     ) t

そして、これらの変数を外側のクエリのロジックに使用します。

于 2013-02-22T15:04:51.910 に答える