ホームページ >データベース >mysql チュートリアル >複数の列にわたる MySQL 全文検索で関連性に優先順位を付けるにはどうすればよいですか?

複数の列にわたる MySQL 全文検索で関連性に優先順位を付けるにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-07 07:27:11343ブラウズ

How Can I Prioritize Relevance in MySQL Full-Text Searches Across Multiple Columns?

複数の列を使用した MySQL 全文検索での関連性の優先順位付け

MySQL では、MATCH() AGAINST() 関数により全文検索が容易になります複数の列にわたって。デフォルトでは、検索の関連性は、指定されたすべての列内の一致する用語の出現の組み合わせによって決定されます。ただし、特定の列に基づいて関連性を優先する必要があるシナリオが発生する場合があります。

列による関連性

これを実現するには、複数の関連性列を導入できます。あなたが述べたように、各列ごとに。このアプローチでは正確な優先順位付けが保証されますが、検索が冗長になるため、パフォーマンスに影響します。

関連性の優先順位付けの最適化

パフォーマンスと関連性の優先順位付けのバランスを取る代替方法は、関連性の計算式。次に、先頭列の重み係数を組み込んだ変更されたクエリを示します。

SELECT * ,
       MATCH (head, body) AGAINST ('some words') AS relevance,
       MATCH (head) AGAINST ('some words') AS title_weight
FROM pages
WHERE MATCH (head, body) AGAINST ('some words')
ORDER BY (title_weight + relevance) DESC

このクエリは、先頭列の関連性スコアにより高い重みを割り当てます。それに応じて重みを調整することで、特定の列に基づいて関連性に優先順位を付けることができます。

ボーナス: 単語の出現数をカウントする

各列内で一致する用語の出現をカウントするには、次の手順を実行します。 MATCH() で BOOLEAN MODE フラグを利用できます:

SELECT * ,
       MATCH (head, body) AGAINST ('some words' IN BOOLEAN MODE) AS relevance,
       MATCH (head) AGAINST ('some words' IN BOOLEAN MODE) AS title_count
FROM pages
WHERE MATCH (head, body) AGAINST ('some words' IN BOOLEAN MODE)
ORDER BY title_count DESC, relevance DESC

title_count 列指定された用語 erscheinen が先頭列に何回表示されるかを示します。この情報は、検索結果をさらに絞り込むのに役立ちます。

注: このアプローチは、MySQL バージョン 8.0 以降に適しています。古いバージョンの場合は、関連性の優先順位を付けて用語の出現をカウントするための代替方法を検討する必要がある場合があります。

以上が複数の列にわたる MySQL 全文検索で関連性に優先順位を付けるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。