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

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

DDD
リリース: 2024-11-30 19:25:13
オリジナル
311 人が閲覧しました

How Can I Prioritize Column Relevance in MySQL Full-Text Search?

match() と Against() を使用した MySQL 全文検索での列の関連性の優先順位付け

MySQL の MATCH() AGAINST() を使用した全文検索では、関連性によって結果を並べ替えるのは簡単です。ただし、body などの他の列の関連性を考慮しながら、head などの特定の列の関連性を優先したい場合はどうすればよいでしょうか?

次の最初のクエリを考えてみましょう:

SELECT * FROM pages WHERE MATCH(head, body) AGAINST('some words' IN BOOLEAN MODE)
ログイン後にコピー

head 列と body 列で全文検索を実行し、一致する行を返します。

関連性によって並べ替えるには、計算列:

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 列と body 列の両方を同等に扱います。

head 列に優先順位を付けるには、別の関連性列を追加する方法があります。

SELECT *,
       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
ログイン後にコピー

これにより、title_relevance 列が作成されます。これは、head 列のみの関連性を表します。最初に title_relevance で並べ替え、次に関連性で並べ替えることで、関連性の高いヘッド コンテンツを持つ行に優先順位を付けます。

おまけとして、ORDER BY 句を変更して、ヘッド内の指定された単語の出現数を考慮することもできます。列:

ORDER BY title_relevance + (total_head_words * weight_per_word) DESC
ログイン後にコピー

ここで、total_head_words は単語が head 列に出現する回数を表し、weight_per_word は

また、PostgreSQL を柔軟に使用できる場合は、全文検索のためのより高度なランキング機能と重み付け機能を提供します。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート