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 サイトの他の関連記事を参照してください。