[解決済み] MySQL match() against() - 関連性とカラムによる順序?
2023-07-14 17:32:24
質問
さて、複数カラムの全文検索をしたいのですが、こんな簡単なものでいいでしょうか?
SELECT * FROM pages WHERE MATCH(head, body) AGAINST('some words' IN BOOLEAN MODE)
今度は関連性(いくつの単語が見つかったか)で並べたいのですが、これは次のようなものでできました。
SELECT * , MATCH (head, body) AGAINST ('some words' IN BOOLEAN MODE) AS relevance
FROM pages
WHERE MATCH (head, body) AGAINST ('some words' IN BOOLEAN MODE)
ORDER BY relevance
さて、ここからが迷うところなのですが、関連性を優先させたいのは
head
の列に関連性を優先させたいのです。
関連性のあるカラムを2つ作ればいいんだろうけど、1つは
head
と
body
しかし、その時点で、テーブルの中で同じ検索を3回行うことになります。この関数を作成する目的では、クエリが他のテーブルに対して結合および照合されるため、パフォーマンスが重要です。
それで、私の主な質問は 関連性を検索し、特定の列に優先順位を付けるより高速な方法はありますか?(そして、ボーナスとして、おそらく、関連性が列の中で単語が出現する回数を数えるようにすることができますか?)
何か提案やアドバイスがあれば、とてもうれしいです。
注意してください。 私はこれをLAMP-server上で実行する予定です。(ローカルテストではWAMP)
どのように解決するのですか?
これは は は、あなたが望むように、頭の部分との関連性を高めることができます。倍にはなりませんが、あなたにとっては十分な効果があるかもしれません。
SELECT pages.*,
MATCH (head, body) AGAINST ('some words') AS relevance,
MATCH (head) AGAINST ('some words') AS title_relevance
FROM pages
WHERE MATCH (head, body) AGAINST ('some words')
ORDER BY title_relevance DESC, relevance DESC
-- alternatively:
ORDER BY title_relevance + relevance DESC
DB エンジンを変更する柔軟性があるのであれば、次のような選択肢も検討してみてください。 ポストグレス . これは、演算子の重みを設定し、ランキングで遊ぶことができます。
関連
-
ジョイントインデックスのためのmysqlの条件とインデックスが失敗するための条件
-
MySQLにおけるorder byの使用方法の詳細
-
mysqlのデータ圧縮性能比較 詳細
-
[解決済み] datetimeの挿入時に文字列から日付や時刻を変換すると、変換に失敗する
-
[解決済み】MySQL エラー 1093 - FROM 句で更新のターゲット テーブルを指定できません。
-
MySQLにおけるvarchar型とchar型の違い
-
SQLステートメントエラーです。オペランドには 1 つのカラムを含める必要があります [括弧を追加せずに複数のフィールドをクエリする
-
[解決済み] MySQLで複数のカラムに一意制約を指定するには?
-
[解決済み] MySQL で特定のカラム名を持つすべてのテーブルを見つけるにはどうすればよいですか?
-
[解決済み】MySQLのDatetimeカラムにデフォルト値を設定する方法とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQLのデータバックアップにmysqldumpを使用する方法
-
面接では選択式で聞かれましたが......。.for updateはテーブルをロックするか、行をロックするか?
-
[解決済み] [GROUP BY句に含まれるか、集約関数で使用される必要があります。
-
Mysql がエラーを報告 オペランドには 1 つのカラムが含まれている必要があります。
-
SQL Server のトランザクションは、try キャッチに記述しなければ、中間ステートメントがエラーを報告してもコミットされます。
-
PostMan レポート エラー: 接続 ECONNREFUSED 127.0.0.1:port number
-
[解決済み] mysqladminのフラッシュホストでブロックを解除する方法
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLで複数のカラムに一意制約を指定するには?