MATCH
/AGAINST
プロシージャを実装している、MySQL の MyISAM テーブルで単純な検索インターフェイスに取り組んでいます。
一見問題なく動作しているように見えますが、さらに調べてみると、行の長さが短い傾向にあるようです。これは、一致する単語の割合が高いため、与えられるスコアが高くなければならないためだと想像できます。
これは、私が使用している MySQL データベースへのクエリです。結果は、下のスクリーンショットのアプリケーションからのものです。
SELECT
report,
status,
GROUP_CONCAT(DISTINCT status) AS statuses,
GROUP_CONCAT(DISTINCT docID) AS docIDs,
GROUP_CONCAT(DISTINCT analyst) AS analysts,
GROUP_CONCAT(DISTINCT region) AS regions,
GROUP_CONCAT(DISTINCT country) AS countries,
GROUP_CONCAT(DISTINCT topic) AS topics,
GROUP_CONCAT(DISTINCT date) AS dates,
MAX(date) AS date,
MIN(date) AS mindate,
MAX(docID) AS docID,
GROUP_CONCAT(DISTINCT event) AS events,
GROUP_CONCAT(DISTINCT rule) AS rules,
GROUP_CONCAT(DISTINCT link SEPARATOR ' ') AS links,
GROUP_CONCAT(DISTINCT province) AS provinces,
MATCH (
region, country, province, topic, event
)
AGAINST (
'toxic china'
) AS score
FROM search_reports
GROUP BY report
ORDER BY score DESC
簡単にするために、AGAINST
この問題を解決している間、定数として を残しました。現在、「有毒な中国」のみを検索するように設定されています。したがって、中国を含まない結果が、その特定の検索キーワードを含む結果よりも上位にランク付けされることは予想外です。