アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

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

こんにちは、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 倍のスコアになります。 これでちゃんと水族館におでかけできます。

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

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