ブール全文検索を併用してスコア調整

区分
全文検索
報告者

こんにちは、tahara です。 いこーよに導入した全文検索ですが、問題があり改善を行いました。

「品川 水族館」で検索を行った時、「品川」という語だけ多数含んでいるスポッ トが「品川」と「水族館」の両方を含んでいるスポットより上位に表示されて いました。 これじゃ水族館におでかけできない!

MySQL の全文検索のスコア付けを調整できるか調べてみたのですが、それらし いパラメータは見付つかりませんでした。

さてどうしたものかと悩んだ結果、order by でブール全文検索を使ってがんば ることにしました。

ブール全文検索を使えば、「品川」と「水族館」両方含んでいるものだけ見付 けることができます。

次のように自然言語検索とブール全文検索を併用してスコアを調整しました。

select ... from ...
where MATCH (content) AGAINST ('品川 水族館')
order by MATCH (content) AGAINST ('品川 水族館') *
         (case when MATCH (content) AGAINST ('+品川 +水族館' IN BOOLEAN MODE) then 2.0 else 1.0 end)

「品川」と「水族館」の両方を含んでいるスポットは、片方しか含んでいない スポットの 2 倍のスコアになります。 これでちゃんと水族館におでかけできます。

問題点はブール全文検索を行う分、少しだけ遅くなることです。 もっといい方法はないでしょうか?

最後に、弊社ではシステムエンジニア、プログラマ、インフラエンジニアなどを募集しています。 おきがるにお問い合わせください。

トップページに戻る

技師部隊からの
お知らせ

【求人】エンジニア募集しています。

本頁の来客数
八十七万千百七十六名以上(計測停止中)

メンバー一覧

アクトインディ技師部隊員名簿

アクトインディ技師部元隊員

アクトインディへ

カテゴリー

アクトインディ

aaaa