コンテンツIDに1つのキーワードを割り当てる検索インデックス(2つの列テーブル)を構築しました。ヒット頻度別にキーワードの検索結果を並べ替えるにはどうすればいいですか?
現在、単一のキーワードを検索しています。
しかし、 SELECT media_id, keyword FROM search_index WHERE keyword = 'b' OR keyword = 'a'
のような複数のキーワードを検索すると(そして'a'
最初にすべてのヒット、'b'
)アルファベットキーワード順に結果を返します。
私は結果ページでPHPを使ってみましたが、表示するよりも多くのデータをデータベースからロードして、受け入れ可能なソートを取得する必要があります。この手法では、スクリプトはより頻繁に割り当てられたキーワードに対してタイムアウトすることさえあります。
また、GROUP BY
はアルファベット順の結果を1つのIDにグループ化するように見えました。
編集: 最後に、私はSELECT DISTINCT media_id, keyword, COUNT(media_id) AS num FROM search_index GROUP BY media_id ORDER BY num DESC
のようなものを見つけましたが、それはちょっとうまくいくが、実際は遅いです。
私は 'b'と 'a'を検索すると、その結果の最初に 'a'と 'b'のIDが必要です。
どのように私はMySQLに、1つのIDのヒット頻度で出力を並べ替えるように指示することができますか?
私の検索インデックスソリューションでは使用しないことを教えてくれてありがとう。確かに、私はすべてのキーワードを 'TEXT'フィールドに入れ、フルテキストで検索することができましたが、300K +の行テーブルでそのようなもののパフォーマンスを感じたことがありますか?私はそうは思わない。 (インデックスは数ミリ秒以内に検索結果を提供することができます。 –
申し訳ありません。ただ助けてくれるようにしよう。 –
私は本当に助けを感謝します、私は本当に!しかし、それは、答えが質問の意図を無視するとどこにも導かれません。 –